Excel: Workbooks und Worksheets per VBA

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Das Objektmodell von Excel bietet eine ganze Reihe hierarchisch angeordneter Elemente, die wir uns in diesem Artikel ansehen. Dabei schauen wir uns auch gleich an, wie wir diese per VBA referenzieren können. Wir beginnen ganz oben in der Hierarchie mit der Excel-Anwendung und arbeiten uns dann über die verschiedenen Elemente bis hin zur einzelnen Zelle mit ihren Eigenschaften. Nach der Lektüre dieses Artikels kannst Du alle wichtigen Elemente eines Excel-Workbooks referenzieren, wirst diese in Schleifen durchlaufen und je nach Objekttyp neue Elemente hinzufügen, bearbeiten oder entfernen können. Außerdem lernst Du noch einige Grundlagen des VBA-Editors kennen.

Hinweis: Speichern als .xlsm-Datei nötig

Wir beschreiben in diesem Artikel einige Elemente, die zum VBA-Projekt einer Excel-Datei hinzugefügt werden können. Damit die Änderungen an diesem VBA-Projekt mit der Excel-Datei gespeichert werden, musst Du diese unter einem anderen Dateityp speichern, nämlich als Excel-Arbeitsmappe mit Makros (*.xlsm).

Dazu erscheint allerdings auch noch eine Meldung, bevor Du die Datei ohne diese Änderungen speicherst. Lies diese genau, um nicht versehentlich den hinzugefügten VBA-Code zu verlieren.

Ganz oben: Das Application-Objekt

Wenn wir ganz oben in der Hierarchie der Excel-Objekte beginnen wollen, dann sprechen wir über das Application-Objekt, also die eigentliche Anwendung.

Ein solches Objekt gibt es für alle Office-Anwendungen, die VBA-Unterstützung anbieten, also zum Beispiel Access, Excel, Outlook, PowerPoint und Word. Das Application-Objekt enthält alle weiteren Objekte, die wir für die Automatisierung der jeweiligen Anwendung benötigen – zum Beispiel Eigenschaften, über die wir die aktive Arbeitsmappe (Workbook) oder das aktuelle Tabellenblatt (Worksheet) referenzieren und diese steuern können.

Application-Objekt: Von innen oder außen referenzieren?

Bei jeder Office-Anwendung gibt es verschiedene Möglichkeiten, das Application-Objekt der jeweiligen Anwendung zu referenzieren.

Dabei kommt es darauf an, von wo aus man darauf zugreifen möchte. Wir haben zum Beispiel die folgenden Optionen:

  • Zugriff vom VBA-Projekt einer Excel-Datei. Hier können wir einfach über die Application-Klasse auf die aktuelle Instanz von Excel zugreifen oder seine Eigenschaften, Methoden und Ereignisse nutzen.
  • Von einem VBA-Projekt oder einem ähnlichen Projekt außerhalb der Excel-Anwendung (zum Beispiel einer Anwendung oder einer DLL auf Basis von VB.NET oder VB6/twinBASIC). Dann gibt es verschiedene Techniken, um eine neue Excel-Instanz zu erstellen oder eine vorhandene zu nutzen oder auch um ein Workbook zu öffnen oder ein vorhandenes zu referenzieren.
  • Von einem COM-Add-In aus, das von Excel selbst gestartet wird. Hier übergibt Excel beim Starten des COM-Add-Ins eine Referenz auf das Application-Objekt der aktuellen Instanz an das COM-Add-In, wo diese Referenz in einer Variablen gespeichert und anschließend verwendet werden kann.

Wir wollen in diesem Artikel von der ersten Variante ausgehen. Die übrigen beiden Möglichkeiten, über das Application-Objekt von Excel auf das angezeigte Workbook mit den Worksheets und den enthaltenen Daten zuzugreifen, stellen wir in weiteren Artikeln vor.

VBA-Editor anzeigen

Wenn Du unter Excel bisher noch nicht oder nur in Zusammenhang mit dem Aufzeichnen von Makros mit dem VBA-Editor Kontakt hattest, ist dies der einfachste Weg, diesen zu aktivieren: Ist Excel geöffnet, betätigst Du einfach die Tastenkombination Alt + F11 und der VBA-Editor erscheint.

Dieser zeigt zu Beginn üblicherweise die Ansicht aus Bild 1 an. Es kann auch sein, dass der linke Bereich (der Projekt-Explorer) oder der untere Bereich nicht angezeigt werden. Diese kannst Du mit Strg + R (Projekt-Explorer) und Strg + G (Direktbereich) einblenden.

Der VBA-Editor für eine neue, leere Excel-Datei

Bild 1: Der VBA-Editor für eine neue, leere Excel-Datei

Der Projekt-Explorer zeigt aktuell zwei Objekte an, nämlich ein Klassenmodul namens DieseArbeitsmappe, dem Du Code hinzufügen kannst, der sich auf die komplette Arbeitsmappe bezieht und eines namens Tabelle1, das den Code für das Worksheet beziehungsweise das Tabellenblatt namens Tabelle1 aufnimmt. Fügen wir weitere Tabellenblätter hinzu, landen automatisch entsprechende Klassenmodule im VBA-Projekt der Excel-Datei.

Klassenmodule für Workbook und Worksheet

Dass es sich bei den beiden Modulen um Klassenmodule und nicht um Standardmodule handelt, erkennt man nach dem Öffnen der Module, wenn man auf das linke obere Kombinationsfeld im Codefenster klickt. Hier erscheint beispielsweise für das Modul DieseArbeitsmappe ein Eintrag namens Workbook (siehe Bild 2), bei den Klassenmodulen zu den Tabellenblättern erscheint der Eintrag Worksheet.

Auswahl der Klasse, auf welches sich das Klassenmodul bezieht

Bild 2: Auswahl der Klasse, auf welches sich das Klassenmodul bezieht

Wir können die Klasse, auf das sich die Klassenmodule beziehen, also direkt auswählen. Was geschieht danach? Der VBA-Editor legt direkt nach der Auswahl eine Prozedur für das Standardereignis dieser Klasse an, im Fall des Moduls DieseArbeitsmappe das Ereignis Workbook_Open (siehe Bild 3).

Auswahl der Ereignisse der Klasse

Bild 3: Auswahl der Ereignisse der Klasse

Außerdem können wir nach der Auswahl des Eintrags Workbook im rechten Kombinationsfeld die übrigen Ereignisse der Klasse auswählen und somit weitere Ereignisprozeduren anlegen.

Workbook: Kein Buch, sondern eine Datei

Aus Sicht von VBA hat jede Excel-Datei ein eigenes VBA-Projekt. Wenn Du mehrere Excel-Dateien auf dem gleichen Rechner öffnest und den VBA-Editor aktivierst, findest Du im Projekt-Explorer für jede Excel-Datei ein eigenes VBA-Projekt.

Bei drei geöffneten Excel-Dateien erscheinen diese im Projekt-Explorer wie in Bild 4.

Projekt-Explorer mit mehr als einem Excel-VBA-Projekt

Bild 4: Projekt-Explorer mit mehr als einem Excel-VBA-Projekt

Jedes dieser VBA-Projekte enthält genau ein Klassenmodul des Typs Workbook und ein oder mehrere des Typs Worksheet. Auch diese sind in der Abbildung gut zu erkennen.

Auf aktives Workbook zugreifen

Um auf ein Workbook zuzugreifen, gibt es verschiedene Möglichkeiten. Das aktive Workbook, also das Workbook, das aktuell in Windows den Fokus hat, können wir mit dem folgenden Ausdruck referenzieren:

  ActiveWorkbook.Name
VBAZugriffAufExcelElemente.xlsx

Wenn mehrere Workbooks und somit mehrere Excel-Fenster geöffnet sind, gilt dies ebenfalls.

Diesen Befehl setzen wir beispielsweise im Direktbereich des VBA-Editors ab, der sich zum Ausprobieren einzelner Anweisungen gut eignet (siehe Bild 5).

Zugriff auf das aktuelle Workbook-Element

Bild 5: Zugriff auf das aktuelle Workbook-Element

 

Schreibe einen Kommentar