VBA thisWorkbook Verwendung

Wie unterscheidet sich das Erstellen eines neuen Moduls vom Einfügen von Dingen in thisWorkbook?

ThisWorkbook ist das Host-Dokument. Es stellt das Workbook-Objekt dar, das das VBA-Projekt enthält. Wie jedes Workbook-Objekt reagiert es auf Workbook-Ereignisse.

ThisWorkbook ist, wie jedes „SheetX“-Modul, eine spezielle Art von Klassenmodul, das VBA als „Dokumentenmodul“ versteht – diese speziellen Module können nicht hinzugefügt oder entfernt werden. Für sie ist die Host-Anwendung (hier Excel) zuständig: Um ein Arbeitsblattmodul hinzuzufügen, müssen Sie der Arbeitsmappe ein Arbeitsblatt hinzufügen. VBA-Code kann New kein Dokumentenmodul erstellen; Sie müssen die von der Bibliothek bereitgestellten Fabrikmethoden verwenden, um sie zu erstellen (das sind .Workbooks.Open, .Workbooks.Add, .Worksheets.Add).

Da es sich um Objekte handelt, können Sie ihre öffentlichen Mitglieder nicht aufrufen, ohne eine Instanz davon zu haben. ThisWorkbook definiert ein Objekt, das praktischerweise ThisWorkbook heißt, so dass man seine Mitglieder aufrufen kann, indem man den Mitgliedsaufruf mit ThisWorkbook qualifiziert:

ThisWorkbook.SomePublicProcedure "arg1", arg2, 42

Gleiches gilt für Arbeitsblattmodule, außer dass diese ein Objekt definieren, das nach der (Name)-Eigenschaft des Moduls benannt ist – standardmäßig ist die (Name)-Eigenschaft von Blatt „Sheet1“ Sheet1, so dass man sie wie folgt qualifizieren kann:

Sheet1.SomePublicProcedure "arg1", arg2, 42

ThisWorkbook stellt öffentliche Benutzerprozeduren sowie jedes von Workbook geerbte Mitglied dar; Sheet1 stellt öffentliche Benutzerprozeduren sowie jedes von Worksheet geerbte Mitglied dar.

Was SOLL ich in diese Arbeitsmappe schreiben?

Alles, was zur Arbeitsmappenebene gehört. Das heißt, Code, der das Host-Dokument beeinflusst. Das wären vor allem Ereignisbehandlungsprozeduren, z.B. ein Handler für das Open-Ereignis, das aufgerufen wird, wenn die Arbeitsmappe (mit aktivierten Makros) in Excel geöffnet wird.

Sie möchten so wenig Code wie möglich im Code-Behind eines Dokuments haben, also rufen Ihre Ereignisbehandlungsprozeduren einfach Prozeduren als Reaktion auf Ereignisse auf:

Private Sub Workbook_Open() DoSomethingEnd Sub

Wobei DoSomething ein Public Sub in einem Standardmodul wäre.

Gibt es eine Möglichkeit, auf die Funktionen von thisWorkbook (oder einem bestimmten Blattmodul von der Excel-Benutzeroberfläche aus) zuzugreifen?

Das wollen Sie nicht tun. Aber Sie können, wenn Sie wollen, ein Makro einem Public Sub zuweisen, das in ThisWorkbook definiert ist:

Beachten Sie, dass das Makro mit dem ThisWorkbook Objektnamen qualifiziert ist.

Normalerweise würden Sie Ihre Makros in Standardmodulen definieren wollen. Standardmodule sind keine Objekte und können nicht instanziiert werden. Auf eine öffentliche Prozedur in einem Standardmodul kann von überall im Projekt zugegriffen werden, und sofern nicht oben Option Private Module steht, sind seine öffentlichen Mitglieder für Excel ohne weiteres verfügbar.

Wenn Sie mit „für Excel verfügbar“ meinen, dass ich sie in einer Formel verwenden kann, dann meinen Sie „als UDF offengelegt“, und diese gehören wie Makros in ein Standardmodul, nicht ThisWorkbook.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.