Déplacer le document Excel ouvert vers une fenêtre séparée

14

Connexes (mais pas les mêmes): ouvrir des fichiers Excel dans une nouvelle fenêtre

Si j'ai une instance d'Excel avec plusieurs documents ouverts dans la même fenêtre. Existe-t-il un moyen de «détacher» l'une des fenêtres de l'instance en cours d'exécution d'Excel afin qu'elle se trouve dans une fenêtre entièrement différente?

Ce qui ne correspond pas au projet de loi:

  • Organiser tout / voir côte à côte / autres trucs MDI; Je veux une fenêtre séparée qui peut être agrandie séparément sur un autre moniteur et qui est gérée différemment par le système de fenêtres, etc.
  • L'enregistrer / le fermer dans l'instance en cours d'exécution, puis ouvrir une nouvelle instance d'Excel et y ouvrir le fichier (c'est ce que je fais actuellement, mais c'est pénible)

modifier : la version Excel cible est 2007 et 2010, mais tout fera l'affaire

Daniel DiPaolo
la source
Je ne peux pas vous aider mais j'ai vu les deux dans Excel: Tout dans une seule fenêtre (comme MDI) et chaque feuille une fenêtre. Avez-vous vérifié les préférences? C'est peut-être une option?
Aaron Digulla
1
@Aaron qui peut être acceptable et serait potentiellement meilleur que ce que j'ai maintenant, mais je ne vois cette option nulle part
Daniel DiPaolo
1
Microsoft soit damné de m'avoir enfermé dans une seule fenêtre Excel! Votre système d'exploitation n'est-il pas appelé Windows - pluriel? Bienvenue dans Window 7!
dunxd
@dunxd - c'est drôle de lire ce "vieux" commentaire maintenant car, ici à l'avenir, il y a constamment des utilisateurs qui se plaignent qu'Excel ouvre chaque classeur dans une fenêtre séparée .
ashleedawg
Désormais, les fenêtres à onglets comme dans Chrome qui peuvent être «arrachées» ou recombinées sont les meilleures des deux mondes. Grande avancée de l'interface utilisateur.
dunxd

Réponses:

4

Idée intéressante. Je suis raisonnablement convaincu que vous ne pouvez pas le faire sans une macro personnalisée. Être un dimanche pluvieux ...

Sub OpenInNewInstance()
     Dim objXLNewApp As Excel.Application
     Dim doc As String

     doc = ActiveWorkbook.FullName
     ActiveWorkbook.Close True

     Set objXLNewApp = CreateObject("Excel.Application")

     objXLNewApp.Workbooks.Open doc
     objXLNewApp.Visible = True
End Sub

En supposant que vous n'êtes pas familier avec VBA, vous devez:

  1. Copiez le code ci-dessus
  2. Avec un nouveau classeur Excel ouvert, ouvrez l'éditeur VBA d'Excel (Alt + F11)
  3. Cliquez avec le bouton droit sur VBAProject (Book1) (ou son nom dans le menu de gauche)
  4. Sélectionnez Insérer> Module
  5. Collez le code dans la fenêtre principale
  6. De retour dans Excel, sélectionnez un autre classeur pour tester le code (il enregistrera le classeur avant de le fermer)
  7. Revenez à l'éditeur VBA, sélectionnez le module que vous avez collé et appuyez sur le bouton de lecture

J'ai 3 versions d'Excel installées sur ma machine, et lorsque je l'exécute dans Excel 2010, il ouvre une nouvelle instance d'Excel 2003.

Si cela convient à vos besoins, vous pouvez l'intégrer dans un complément et le rendre disponible sous forme de bouton ruban. Faites-le moi savoir et je pourrai vous aider si vous ne le savez pas.

Edit: Si cette approche fonctionne pour vous, il y aurait évidemment du code supplémentaire à ajouter qui garantirait que la nouvelle instance d'Excel est maximisée dans une autre fenêtre. Faites le moi savoir.

une variante
la source
C'est parfait! (Compte tenu des circonstances liées à l'utilisation d'Excel 2010, c'est-à-dire)
Tobias Kienzler
Ou vous pouvez simplement cliquer avec le bouton droit sur l'icône Excel et cliquer sur Microsoft Excel, ce qui ouvre une nouvelle instance (qui est essentiellement ce que le code ci-dessus semble faire). Ce que j'ai fait (par accident, je ne peux pas comprendre comment le répéter) est d'ouvrir un classeur Excel en dehors du MDI de l'application existante (me permettant effectivement d'avoir ce classeur dans une fenêtre séparée) mais toujours capable d'interagir avec d'autres classeurs (pour les vlookups dans mon MDI principal (vlookups, etc.)
William
3

Je n'ai pas de moyen de "détacher" une feuille dans une nouvelle fenêtre, mais si vous savez dès le départ que vous voudrez deux fenêtres, c'est le moyen le plus rapide:

Ouvrez votre premier fichier comme d'habitude. MAJ + CLIQUEZ sur le bouton de la barre des tâches Excel (en bas de votre écran, entre le bouton Démarrer et l'horloge). Cela forcera Excel à ouvrir une nouvelle instance dans une fenêtre distincte. Allez dans cette nouvelle fenêtre et cliquez sur Fichier -> Ouvrir pour ouvrir le deuxième fichier. Rincez et répétez au besoin pour plusieurs fenêtres.

Malheureusement, si vous aimez double-cliquer sur des fichiers pour ouvrir Excel, vous devrez rompre cette habitude pour la deuxième fenêtre, ce qui est mon problème habituel. Mais avec une certaine réflexion prospective, il n'y a pas de moyen plus simple.

Brady
la source
0

Pour ouvrir 2 instances, double-cliquez sur le premier fichier que vous souhaitez ouvrir. Une fois que c'est ouvert, allez dans démarrer / programmes / msoffice / excel et ouvrez simplement une autre instance à partir de là. Ensuite, vous pouvez utiliser File / open Cela fonctionne pour moi. S'il n'a pas un regard sur les Options des dossiers> Types de fichiers, XLS, Avancé et vérifiez le formulaire Ouvrir.

Dave
la source
J'ai spécifiquement mentionné que je fais déjà cela.
Daniel DiPaolo
Excusez-moi, je mélangeais mes fenêtres et mes instances. Et je suppose que vous avez essayé de maximiser Excel sur les deux moniteurs, puis de visualiser -> une nouvelle fenêtre qui vous permet de gérer cette fenêtre séparément?
Dave
Affichage> Nouvelle fenêtre crée simplement une nouvelle fenêtre dans cette même instance, pas une nouvelle fenêtre non MDI.
Daniel DiPaolo
0

La réponse ci-dessus fonctionnerait probablement avec un classeur autre que le classeur actif , ce que j'avais besoin de faire. Voici ce que j'ai utilisé


Assurez-vous au démarrage que le classeur est seul en instance:

Private Sub Workbook_Open()
    If Application.Workbooks.Count > 1 Then  'check if there's >1 open wb's in this instance
        If MsgBox("This workbook will be moved to a new instance of Excel," & vbLf & _
            "so as to not affect performance of your other workbooks.", _
            vbOKCancel + vbInformation + vbDefaultButton1 + vbMsgBoxSetForeground) _
            = vbCancel Then Exit Sub
        Debug.Print Application.Hinstance, "Moving wb to new instance."
        OpenInNewInstance
        Debug.Print Application.Hinstance, "Moved wb to new instance."
    Else
        Debug.Print "This wb is in it's own instance. (#" & Application.Hinstance & ")"
    End If
End Sub

Sub OpenInNewInstance()
    With ThisWorkbook
        .Save                                           'save workbook before making it read-only
        .ChangeFileAccess xlReadOnly                    'make this wb read-only (so the other isn't)
        Shell ("excel.exe /x """ & .FullName & """")    'open current wb in new instance
        .Close                                          'close this workbook
    End With
End Sub

Ce code va dans le ThisWorkbookmodule , de sorte que lorsque le classeur est ouvert, il vérifie immédiatement si c'est le seul classeur ouvert dans cette instance, et sinon:

  1. Enregistrer le classeur actuel
  2. Définir le wb actuel en lecture seule (pour éviter qu'une deuxième copie ne soit un problème)
  3. Shell à l'invite de commandes pour ouvrir Excel dans une nouvelle instance (à l'aide du commutateur de/x ligne de commande d'Excel ), en chargeant une autre instance du classeur actuel
  4. Fermer le classeur actuel

Si nécessaire, vous pouvez utiliser une ligne de commande personnalisée lors de l'ouverture de la nouvelle instance pour transférer des instructions, etc., vers la nouvelle instance. Vous pouvez également envisager les avantages et les inconvénients de masquer la fenêtre d'application pour la nouvelle instance.

ashleedawg
la source