Module und Co. im Griff mit VBComponent

Bei der Programmierung des VBA-Editors per VBA ist eine der Kernkomponenten das Element VBComponent. Wir können diese mit der Auflistung VBComponents durchlaufen oder direkt über den Namen der Komponente oder den Index darauf zugreifen. Danach ergeben sich verschiedene Möglichkeiten, die erst mit dem Zugriff auf das CodeModule des VBComponent-Elements interessant werden. Bis dahin schauen wir uns aber noch an, welche Möglichkeiten das VBComponent-Element bietet.

Vorbereitung

Um die Elemente der Klasse VBE nutzen zu können, benötigen Sie einen Verweis auf die Bibliothek Microsoft Visual Basic for Applications Extensibility 5.3 Object Library, den Sie im Verweise-Dialog des VBA-Editors hinzufügen können (Menüeintrag Extras|Verweise).

Elemente der VBComponent-Klasse

Die VBComponent-Klasse und ihre Eigenschaften, Methoden und Auflistungen können Sie im Objektkatalog im Überblick ansehen, wenn Sie dort nach VBComponent suchen (siehe Bild 1). Die Klasse bietet folgende Elemente:

Das VBComponent-Element im Objektkatalog

Bild 1: Das VBComponent-Element im Objektkatalog

  • Activate: Aktiviert das VBComponent-Objekt und zeigt es in seinem Fenster an.
  • CodeModule: Liefert einen Verweis auf das CodeModule-Element des VBComponent-Objekts.
  • Collection: Liefert Zugriff auf die Collection mit diesem VBComponent-Objekt und allen anderen, die in der übergeordneten VBComponents-Auflistung enthalten sind.
  • Designer: Liefert einen Verweis auf den Designer des VBComponent-Objekts. Dieser liefert bei den üblicherweise unter Access verwendeten VBComponent-Elementen immer Nothing. Sie können ihn nutzen, wenn Sie beispielsweise UserForm-Objekte programmieren wollen, was nicht Thema dieses Beitrags ist und normalerweise unter Access nicht geschieht.
  • DesignerID: Siehe Eigenschaft Designer.
  • DesignerWindow: Siehe Eigenschaft Designer.
  • Export: Exportiert das Objekt in eine Textdatei.
  • HasOpenDesigner: Siehe Designer. Liefert daher für die standardmäßig verwendeten Access-Module immer den Wert False.
  • Name: Liefert den Namen des VBComponent-Objekts.
  • Properties: Liefert eine Auflistung der Property-Eigenschaften des VBComponent-Elements.
  • Saved: Gibt an, ob es ungespeicherte Änderungen an dem VBComponent-Objekt gibt.
  • Type: Gibt den Typ des VBComponent-Objekts zurück.
  • VBE: Verweis auf das VBA-Editor-Objekt des VBComponent-Objekts

VBComponent-Objekte durchlaufen

Die folgende Prozedur referenziert mit der Variablen objVBProject das aktuelle VBA-Projekt und durchläuft dann in einer For Each-Schleife die Elemente der Auflistung VBComponents. Dabei speichert sie den Verweis auf das jeweils aktuelle Objekt in der Variablen objVBComponent. Damit gibt die Prozedur den Namen des VBComponent-Objekts aus:

Public Sub VBComponentsDurchlaufen()
     Dim objVBProject As VBProject
     Dim objVBComponent As VBComponent
     Set objVBProject = VBE.ActiveVBProject
     For Each objVBComponent In objVBProject.VBComponents
         Debug.Print objVBComponent.Name
     Next objVBComponent
End Sub

Das Ergebnis entspricht den Elementen, die Sie in den drei Ordnern Microsoft Access Klassenobjekte, Module und Klassenmodule des Projektexplorers sehen, zum Beispiel:

mdlVBAProjektPerVBAReferenzieren
mdlVBProject
mdlVBE
Form_frmBeispiele
clsBeispiel
mdlVBComponent

VBComponent-Objekte gezielt referenzieren

Wenn Sie wissen, auf welches VBComponent-Objekt Sie zugreifen wollen, beispielsweise um sein Code-Module-Objekt zu bearbeiten, können Sie dies auch über den Index oder den Namen erledigen. Der Index ist 1-basiert:

  VBE.ActiveVBProject.VBComponents(1).Name
mdlVBAProjektPerVBAReferenzieren

Das Referenzieren per Name geht so – hier mit Ausgabe des Wertes der Eigenschaft Saved:

  VBE.ActiveVBProject.VBComponents("mdlVBE").Saved
Wahr

Neues VBComponent-Objekt hinzufügen

Um ein neues VBComponent-Objekt hinzuzufügen und somit ein Klassenmodul eines Formulars oder Berichts, ein Standardmodul oder ein alleinstehendes Klassenmodul, benötigen Sie die Add-Methode der VBComponents-Auflistung. Dieser übergeben Sie lediglich den Typ der zu erstellenden Komponente (siehe Bild 2).

Anlegen eines neuen VBComponent-Elements

Bild 2: Anlegen eines neuen VBComponent-Elements

Das Ergebnis referenzieren wir beispielsweise mit der Variablen objVBComponent und bearbeiten dieses anschließend weiter. Dabei geben wir im folgenden Beispiel zunächst nur den Namen der Komponente an:

Public Sub VBComponentNeu()
     Dim objVBProject As VBProject
     Dim objVBComponent As VBComponent
     Set objVBProject = VBE.ActiveVBProject
     Set objVBComponent = objVBProject.VBComponents. Add(vbext_ct_StdModule)
     With objVBComponent
         .Name = "mdlNeu"
     End With
End Sub

Als Ergebnis erhalten wir nach dem Ausführen dieser Prozedur ein neues, leeres Codefenster mit einem Standardmodul namens mdlNeu.

VBComponent-Element löschen

Wenn Sie ein Modul löschen wollen, referenzieren Sie zunächst das entsprechende VBComponent-Element und löschen es dann mit der Remove-Methode der VBComponents-Auflistung:

Public Sub VBComponentLoeschen()
     Dim objVBProject As VBProject
     Dim objVBComponent As VBComponent
     Set objVBProject = VBE.ActiveVBProject
     Set objVBComponent =  objVBProject.VBComponents("mdlNeu")
     objVBProject.VBComponents.Remove objVBComponent
End Sub

VBComponent-Element importieren

Mit der Import-Methode der VBComponents-Auflistung können Sie zuvor exportierte oder auch extern erstellte Module importieren. Beim Erstellen wird das VBComponent-Element unter dem Namen angelegt, der in der zu importierenden Datei mit dem Attribut VB_Name festgelegt ist. Ist dieses Attribut nicht vorhanden, verwendet die Methode einen generischen Namen wie Modul1:

Public Sub VBComponentImportieren()
     Dim objVBProject As VBProject
     Set objVBProject = VBE.ActiveVBProject
     objVBProject.VBComponents.Import CurrentProject.Path  & "\Neu.txt"
End Sub

Aktivieren eines VBComponent-Objekts

Um ein VBComponent-Objekt zu aktivieren, referenzieren Sie es und rufen seine Methode Activate auf – beispielsweise wie folgt vom Direktbereich des VBA-Editors aus:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar