Wenn Sie ein VBA-Programm in einer bestimmten Excel-Instanz ausführen, können Sie andere Excel-Instanzen erstellen, Arbeitsmappen in den neu erstellten Instanzen öffnen und ändern und diese Instanzen dann schließen. Möglicherweise fragen Sie sich jedoch, wie Sie innerhalb eines Makros feststellen können, ob bereits andere Excel-Instanzen ausgeführt werden, und in diesem Fall die Kontrolle über diese Instanzen übernehmen können.

Es gibt einige Möglichkeiten, wie Sie dies tun können. Wenn Sie nur wissen möchten, wie viele Instanzen von Excel ausgeführt werden, können Sie ein Makro verwenden, das die Windows-API verwendet. Die folgende Funktion implementiert diesen Ansatz:

Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Declare Function FindWindowEx Lib "user32" Alias _   "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Function ExcelInstances() As Long     Dim hWndDesk As Long     Dim hWndXL As Long

'Get a handle to the desktop     hWndDesk = GetDesktopWindow

Do         'Get the next Excel window         hWndXL = FindWindowEx(GetDesktopWindow, hWndXL, _           "XLMAIN", vbNullString)



'If we got one, increment the count         If hWndXL > 0 Then             ExcelInstances = ExcelInstances + 1         End If

'Loop until we've found them all     Loop Until hWndXL = 0 End Function

Dieser Code wurde von Excel MVP Stephen Bullen entwickelt. Sie können offensichtlich nicht auf die einzelnen Instanzen von Excel zugreifen. Es wird nur die Anzahl der geöffneten Instanzen zurückgegeben. Wenn Sie Code für die Verwendung der Instanzen entwickeln möchten, müssen Sie sich nicht auf die Windows-API verlassen. Sie können stattdessen Code wie den folgenden verwenden, um festzustellen, ob eine Instanz von Excel geöffnet ist:

Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application")

Wenn eine Instanz ausgeführt wird, können Sie mit dem xlApp-Objekt darauf zugreifen. Wenn eine Instanz nicht ausgeführt wird, wird ein Laufzeitfehler angezeigt. Die GetObject-Funktion ruft die erste Instanz von Excel ab, die geladen wurde. Um zu anderen zu gelangen, können Sie dieses schließen und dann GetObject erneut versuchen, um das nächste usw. zu erhalten.

Wenn Sie die xlApp auf eine bestimmte Instanz von Excel festlegen möchten, können Sie dies tun, wenn Sie den Namen einer geöffneten Arbeitsmappe in dieser Instanz kennen:

Dim xlApp As Excel.Application Set xlApp = GetObject("ExampleBook").Application

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (9451) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: