ThisWorkbook bezieht sich auf die Arbeitsmappe, in der der Excel VBA-Code ausgeführt wird. ActiveWorkbook hingegen bezieht sich auf die Excel-Arbeitsmappe, die derzeit den Fokus hat, d.h. das vordere Excel-Fenster.
Oft vermischen Excel-VBA-Entwickler diese beiden gängigen Arten von Arbeitsmappen in VBA. Das Problem entsteht dann, wenn man in mehreren Excel-Arbeitsmappen gleichzeitig arbeitet und versehentlich ein Makro aus einer Arbeitsmappe ausführt, während eine andere Excel-Arbeitsmappe gerade aktiv ist. Dies kann katastrophale Auswirkungen haben, wenn Sie VBA-Bereichs- oder VBA-Zelleneigenschaften direkt verwenden.
In diesem Artikel möchte ich den deutlichen Unterschied zwischen den Excel VBA-Objekten ActiveWorkbook und ThisWorkbook erklären.
ActiveWorkbook
Das ActiveWorkbook ist nicht nur die sichtbare Arbeitsmappe, wie viele denken würden, da Sie genauso gut mehrere Arbeitsmappen geöffnet und nebeneinander platziert haben können. Allerdings gilt nur eine Excel-Arbeitsmappe zu einem bestimmten Zeitpunkt als aktiv. Aktiv zu sein ist eine Eigenschaft, die an erster Stelle steht – nur die Arbeitsmappe, deren Fenster gerade ausgewählt ist, gilt als aktiv. Siehe unten für eine genaue Definition
Gibt das Workbook-Objekt zurück, das die Arbeitsmappe im aktiven Fenster darstellt (das Fenster oben). Die Eigenschaft gibt nichts zurück, wenn das Infofenster oder das Zwischenablagefenster das aktive Fenster ist.
Excel VBA ActiveWorkbook Beispiel
'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")
ThisWorkbook
Die Eigenschaft ThisWorkbook ist viel einfacher zu verstehen, da sie einfach auf die Excel-Arbeitsmappe verweist, in der der VBA-Code ausgeführt wird. Die vollständige Definition finden Sie unten:
Gibt das Workbook-Objekt zurück, das die Arbeitsmappe darstellt, in der der aktuelle VBA-Makrocode ausgeführt wird.
Excel VBA ThisWorkbook Beispiel
'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")
ActiveWorkbook vs. ThisWorkbook
Wenn Sie immer noch verwirrt sind über den Unterschied zwischen diesen beiden Eigenschaften, sehen Sie unten:
Auf der linken Seite ist die Excel Arbeitsmappe sichtbar und ist die wichtigste Anwendung. Wenn Sie in diesem Fall ein Makro in dieser Arbeitsmappe ausführen, ist die Eigenschaft ActiveWorkbook die gleiche wie ThisWorkbook.
Auf der rechten Seite ist die Excel-Arbeitsmappe nicht sichtbar oder nicht die wichtigste Anwendung. Wenn Sie in diesem Fall ein Makro in dieser Arbeitsmappe ausführen, repräsentiert die Eigenschaft ActiveWorkbook die Arbeitsmappe auf der linken Seite und ThisWorkbook die Arbeitsmappe auf der rechten Seite.
Ich hoffe, das ist jetzt klar!
Schlussfolgerungen
Nun, da Sie zwischen diesen beiden Eigenschaften unterscheiden können, ist es wichtig, ein paar Dinge im Hinterkopf zu behalten:
- Verwenden Sie im Alltag ThisWorkbook anstelle des fehlerhafteren ActiveWorkbook, wenn Sie erwarten, dass Ihr Code in derselben Arbeitsmappe ausgeführt wird, an der Sie arbeiten
- Verwenden Sie ActiveWorkbook mit Vorsicht, da es eine oberste Eigenschaft ist, die nicht immer eine Eigenschaft zurückgibt, wenn andere Excel-Popup-Fenster beteiligt sind. Obwohl Sie die ActiveWorkbook-Eigenschaft möglicherweise benötigen, wenn Sie mit Excel-AddIns arbeiten (die Code in der aktiven Arbeitsmappe und nicht in Ihrem AddIn ausführen)