Mehrere Excel-Instanzen gestartet, wie bekomme ich das Application-Objekt für alle?
Möchte ich etwas ähnlich
GetObject(,"Excel.Application")
zurück zu erhalten, die Anwendung, die ich erstellt.
Nenne ich CreateObject("Excel.Application")
zu erstellen, Excel-Instanzen. Später, wenn das VBA-Projekt zurückgesetzt, wegen debugging und Codierung, die Anwendung Objekt-Variablen sind verloren, aber die Excel-Instanzen, die im hintergrund ausgeführt werden. Eine Art memory-leak-situation.
Ich möchte zu re-befestigen Sie erneut verwenden (bevorzugte Methode) oder schließen Sie Sie.
- am besten um das problem zu vermeiden in den ersten Platz. Siehe tushar-mehta.com/excel/vba/xl_doesnt_quit/index.htm
- Hast du etwas gepostet nützlich? Bitte feedback posten, voten und/oder akzeptieren, nach dem, was Sie gefunden haben.
- Keine der 4 Antworten richtig eine Antwort auf die Frage. Der nächste ist Florent ' s Antwort, die Listen von Arbeitsmappen (auch wenn Sie in mehreren Instanzen), aber nicht identifizieren, ob es tatsächlich mehrere Instanzen laufen, oder erlauben dem Benutzer, um
Application
Objekte für jede Instanz (zumindest soweit ich das sagen kann). Ich habe nicht in der Lage, einen Weg zu finden, um tatsächlich die Liste mit der Anzahl der Instanzen. Zu klären ist, kann eine Beispiel ist nicht nur "eine andere Arbeitsmappe"; es ist tatsächlich läuft der Prozess in einem separaten Abschnitt des Speichers, etc . . . - . . . Zum Beispiel wird eine neue Instanz von Excel geöffnet werden kann, durch ALT-Taste gedrückt halten, während Sie eine Arbeitsmappe öffnen oder durch starten von Excel über die Befehlszeile oder Zwang für alle Arbeitsmappen mit einem registry-tweak von Microsoft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liste der aktiven Instanzen von Excel:
acc.Parent
(Dim wb As WorkBook
Set wb = acc.Parent
).Wäre dies am besten als Kommentar auf Florent B. sehr nützliche Funktion gibt eine Sammlung von der geöffneten Excel-Instanzen, aber ich habe nicht genügend reputation, um Kommentare hinzuzufügen. In meinen tests, die Sammlung enthielt die "Wiederholungen" des gleichen Excel-Instanzen, d.h.
GetExcelInstances().Count
größer war, als es hätte sein sollen. Ein fix dafür ist die Nutzung derAlreadyThere
variable in der version unten.@PGS62 hat die richtige Antwort für die Rücksendung eine Sammlung, ich kann Sie Durchlaufen alle Instanzen; und es ist genial, wie @M1chael Kommentar.
Dies ist der nested-loop implementiert und voll funktionsfähig:
Und für Word-Instanzen, die geschachtelte Schleife:
Für Wort, das Sie haben, zu verwenden, was ist am Ende erklärt dieser thread
Erstellen Sie ein array von Objekten und speichern Sie die neu erstellten Excel.Anwendung in das array. So können Sie auf Sie wie und Wann Sie benötigen. Nehmen wir mal ein schnelles Beispiel:
In ein Modul:
Test () - makro und Sie sollten sehen, zwei Excel-Anwendungen-pop-up. Dann laufen AnotherTest() und die Excel-Anwendungen zu beenden. Sie können sogar festlegen, dass das array Nichts, nachdem Sie fertig sind.
Können Sie get Griff of das ausführen von Excel-Anwendungen mit Hilfe der Skript-veröffentlicht auf http://www.ozgrid.com/forum/showthread.php?t=182853. Das sollte für Sie, wo Sie gehen wollen.
Verwende ich die folgenden zu prüfen, ob zwei Instanzen ausgeführt werden, und eine Meldung angezeigt. Es könnte geändert werden, um in der Nähe der anderen Instanz... kann Dies helfen... ich brauche code für die Rückgabe einer bestimmten Instanz, und wieder für ähnliche GetObject(,"Excel.Anwendung")... ich glaube nicht, dass es möglich ist, obwohl
In-Modul (einige der Erklärungen sind möglich, die bei den anderen code):
Den ich gefunden habe:
Die bekommt das Objekt, wenn Sie wissen, dass der name des Blattes, die derzeit aktiv in der Excel-Instanz. Ich denke, das könnte sein, bekam von der Anwendung-Titel über das erste bit des Codes. In meiner app, ich weiß, das mit dem Namen.
Diese können erreichen, was Sie wollen.
Bestimmen Sie, ob eine Instanz von Excel geöffnet ist:
Wenn eine Instanz ausgeführt wird, können Sie den Zugriff auf die
xlApp
Objekt. Wenn eine Instanz nicht ausgeführt wird, erhalten Sie eine Laufzeit-Fehler (die Sie benötigen/wollen, einen Fehler-handler). DieGetObject
Funktion wird die erste Instanz von Excel, die beladen war. Sie tun können, Ihren job mit ihm, und um auf andere, können Sie es schließen, und dann versuchenGetObject
wieder der nächste, etc.So werden Sie die Erreichung Ihrer ok-aber-zweitens-am günstigsten gelegene Ziel
(entnommen aus http://excelribbon.tips.net/T009452_Finding_Other_Instances_of_Excel_in_a_Macro.html).
Für die Erreichung Ihrer bevorzugten Ziel, ich denke, dass https://stackoverflow.com/a/3303016/2707864 zeigt Ihnen, wie.