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:
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).
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