Thomas Risi Softwareentwicklung

Auf eine 2. Excelinstanz zugreifen

Aus einer Frage in einem Forum ...

Es soll mit VBA auf eine Arbeitsmappe zugegriffen werden, die in einer anderen Excelinstanz geöffnet ist.

Manche glauben, man könne nur auf die zuerst geöffnet Excelinstanz zugreifen. Nun, hierzu sind jedoch keine besonderen Öffnungs-Szenarien erforderlich. Es reicht aus, wenn man weiß wie der Name (und Pfad) der geöffneten Arbeitsmappe lautet. Da alle Arbeitsmappen als File-Moniker in der ROT (Running Object Table) abgelegt werden, kann man auch per GetObject darauf zugreifen.

Ein entsprechender Code könnte in etwa so aussehen ...

Option Explicit Dim xlExtern As Excel.Application Dim wbExtern As Excel.Workbook ' Hier wird auf die externe Mappe verwiesen Sub GetWorkbook() Set wbExtern = GetObject("C:\UnsereKunden.xls") End Sub ' Nun kann man auch die Excelinstanz zugreifen Sub GetExcel() Set xlExtern = wbExtern.Application End Sub Sub Test() ' Die externe Mappe schließen wbExtern.Close ' Die externe Excelinstanz schließen xlExtern.Quit End Sub

Um auf eine ungespeicherte Arbeitsmappe (z.B. Mappe1) in einer externen Excelinstanz zu verweisen, könnte man z.B. so verfahren ...

Option Explicit Dim xlExtern As Excel.Application Dim wbExtern As Excel.Workbook ' Hier wird auf die externe Mappe verwiesen Sub GetWorkbook() Set wbExtern = GetObject("Mappe1") End Sub ' Nun kann man auch die Excelinstanz zugreifen Sub GetExcel() Set xlExtern = wbExtern.Application End Sub Sub Test() ' Die externe Mappe schließen wbExtern.Close ' Die externe Excelinstanz schließen xlExtern.Quit End Sub

So ähnlich macht es übrigens auch Excel. Wenn eine Excelinstanz geöffnet wird, heißt die angelegte Arbeitsmappe Mappe1. Startet man jetzt eine zweite Excelinstanz, heißt die dort angelegte Arbeitsmappe Mappe2. Excel sieht also zuerst in der ROT nach und vergibt dann einen Namen.



Bewerten Sie bitte dieses Programm.
1 2 3 4 5
Weniger nützlich Sehr nützlich
Bitte teilen Sie uns mit, warum Sie das Programm so bewertet haben. (optional)