Die Visual Basic-Entwicklungsumgebung ist definitiv in die Jahre gekommen. Wer schon einmal mit einer modernen Entwicklungsumgebung wie Eclipse oder dem Visual Studio .NET gearbeitet hat, wird bei der Rückkehr zur VBA-IDE möglicherweise einiges vermissen. Es gibt aber Möglichkeiten, die Entwicklungsumgebung zu erweitern – sogar mit den Hausmitteln von Access und mit nur einer zusätzlichen Bibliothek. Im ersten Teil der Artikelreihe schauen wir uns an, wie Sie auf die Objekte der VBA-Entwicklungsumgebung zugreifen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1904_EntwicklungsumgebungErweitern_Module.accdb.
Einstieg
Genau wie auf die Objekte einer Access-Datenbank wie Tabellen, Abfragen, Formulare und Berichte sowie die darin enthaltenen Steuerelemente können Sie auch auf die Elemente des VBA-Editors zugreifen und diese einlesen, bearbeiten, anlegen, speichern oder löschen. In diesem ersten Teil der Artikelreihe zum Thema Erweitern der VBA-Entwicklungsumgebung schauen wir uns an, wie Sie mit VBA auf die Objekte der Entwicklungsumgebung zugreifen können.
Vorbereitung
Als Erstes benötigen Sie einen Verweis auf die Bibliothek, welche die Objekte, Methoden, Eigenschaften und Ereignisse für die Programmierung des VBA-Editors bereitstellt. Diesen fügen Sie im VBA-Editor hinzu, indem Sie den Menübefehl Extras|Verweise betätigen und im nun erscheinenden Verweise-Dialog den Eintrag Microsoft Visual Basic for Applications Extensibility 5.3 hinzufügen (siehe Bild 1).
Bild 1: Der Verweis auf die Extensibility-Bibliothek für das Programmieren der VBA-Entwicklungsumgebung
VBE: Das Hauptobjekt der Entwicklungsumgebung
In der soeben hinzugefügten Bibliothek finden Sie als Hauptelement die VBE-Klasse. Diese Klasse brauchen sie nicht zu instanzieren, Sie können direkt über den Ausdruck VBE darauf zugreifen. Das sehen Sie schon, wenn Sie im Direktbereich des VBA-Editors VBE und einen Punkt eingeben – IntelliSense zeigt dann direkt die Elemente dieser Klasse an (siehe Bild 2).
Bild 2: Zugriff auf die Eigenschaften und Methoden der VBE-Klasse
VBProject: Das VBA-Projekt
Damit können Sie dann auch direkt auf die Auflistung VBProjects zugreifen.
Warum aber gibt es eine Auflistung über die Projekte Hat eine Access-Anwendung nicht immer nur ein VBA-Projekt, so wie in Bild 3 dargestellt
Bild 3: Das VBA-Projekt im Projekt-Explorer
Nein, das ist nicht der Fall: Sie können dort auch mehrere VBA-Projekte vorfinden. Das ist zum Beispiel der Fall, wenn Sie gerade ein Access-Add-In geladen haben. Dann sieht der Projekt-Explorer wie in Bild 4 aus.
Bild 4: Mehrere VBA-Projekte im Projekt-Explorer
Die einzelnen Projekte können Sie über die Auflistung VBProjects referenzieren, was etwa wie folgt aussieht:
Public Sub VBProjekteAusgeben() Dim objVBProject As VBProject Debug.Print "Anzahl VB-Projekte: " & VBE.VBProjects.Count For Each objVBProject In VBE.VBProjects Debug.Print objVBProject.Name Debug.Print objVBProject.FileName Debug.Print objVBProject.Type Next objVBProject End Sub
Für das Beispiel mit dem zusätzlichen VBA-Projekt aus dem Add-In erhalten wir dann zum Beispiel die folgende Ausgabe:
Anzahl VB-Projekte: 2 prjVBEBeispiele C:\...\1904_EntwicklungsumgebungErweitern_Module.accdb 100 RA2010 C:\...\ADDINS\RIBBONADMIN2016.ACCDA 100
Die Eigenschaftswerte finden Sie übrigens auch im Eigenschaftenfenster des Projekts wieder, das Sie über den Kontextmenü-Eintrag des Projekts öffnen können (siehe Bild 5).
Bild 5: Eigenschaftsfenster des Projekts
Auf das aktive VBA-Projekt zugreifen
Wenn Sie das aktive VBA-Projekt referenzieren wollen, können Sie die Eigenschaft ActiveVBProject der VBE-Klasse verwenden. Wenn Sie die folgende Anweisung im Direktfenster des VBA-Editors ausgeben, erhalten Sie den Namen des VBE-Projekts, das gerade im Projekt-Explorer den Fokus hat:
Debug.Print VBE.ActiveVBProject.Name
Was geschieht, wenn Sie diese Anweisung in einer Prozedur unterbringen und diese dann aufrufen Dann wird der Name des Projekts ausgegeben, in dem sich die Prozedur befindet:
Public Sub AktuellesProjektAusgeben() Debug.Print VBE.ActiveVBProject.Name End Sub
Add-Ins ausgeben
Soeben haben wir schon angesprochen, dass das VBA-Projekt eines Add-Ins angezeigt wird, wenn dieses von der Benutzeroberfläche aus gestartet wurde beziehungsweise aktiv ist. Dabei handelt es sich um Access-Add-Ins. Es gibt aber auch noch Add-Ins für den Visual Basic Editor. Diese verwalten Sie über den Add-In-Manager des VBA-Editors, den Sie über den Eintrag Add-Ins|Add-In-Manager… öffnen.
Dieser zeigt eventuell vorhandene Add-Ins dann wie in Bild 6 in Listenform an. Sie können auch per VBA auf die vorhandenen Add-Ins zugreifen. Dazu verwenden Sie die Auflistung Addins, mit der Sie die Elemente des Typs Addin erhalten. Diese Auflistung können wir wie folgt per For Each-Schleife durchlaufen:
Bild 6: Der Add-In-Manager des VBA-Editors
Public Sub AddInsAusgeben() Dim objAddIn As AddIn Debug.Print "Anzahl Addins: " & VBE.Addins.Count For Each objAddIn In VBE.Addins Debug.Print objAddIn.Description Next objAddIn End Sub
Viele interessante Informationen liefert die Addin-Klasse jedoch nicht – wir erhalten noch nicht einmal den Namen, sondern nur die Beschreibung.?
VBA-Projekt per Name ermitteln
Um auf Nummer sicher zu gehen, ob Sie mit dem richtigen VBProject-Element arbeiten, können Sie einen kleinen Trick anwenden. Es gibt zwar keine Möglichkeit, die Elemente der VBProjects-Auflistung über den Namen des Projekts anzusprechen, aber wir können diese ja durchlaufen und dabei prüfen, welchen Namen das aktuelle VBProject-Element hat. Um das VB-Projekt mit einem bestimmten Namen zu ermitteln, können wir die folgende Funktion verwenden:
Public Function GetVBProjectByName(strName As String) As VBProject Dim objVBProject As VBProject For Each objVBProject In VBE.VBProjects If objVBProject.Name = strName Then Set GetVBProjectByName = objVBProject Exit Function End If Next objVBProject End Function
Wenn Sie etwa eine Eigenschaft wie FileName des VBA-Projekts prjVBEBeispiele ermitteln wollen, können Sie das mit der obigen Funktion wie folgt erledigen:
Debug.Print GetVBProjectByName( "prjVBEBeispiele").FileName
Verweise ausgeben
Auch die Verweise eines VBA-Projekts können Sie per VBA ausgeben lassen. Dazu nutzen Sie die References-Auflistung beziehungsweise die Reference-Klasse. Wichtig ist hierbei, in welchem Kontext Sie die References-Auflistung verwenden. Sie können diese beispielsweise im Direktfenster direkt aufrufen:
Debug.Print References.Count
Dann liefert das die Referenzen des aktuellen Projekts, wenn Sie nur ein Projekt geladen haben. Das aktuelle Projekt ist das Projekt, von dem das aktuelle Codefenster stammt. Wenn Sie mehr als ein Projekt geladen haben, sollten Sie dieses gezielt ansprechen. Wie das geht, haben Sie oben schon erfahren.
Wenn Sie wie in der Prozedur aus Listing 1 mit ActiveVBProject auf das aktuelle Projekt zugreifen, müssen Sie sicherstellen, dass eines der Elemente des gewünschten Projekts im Projekt-Explorer markiert ist – oder auch das Projekt selbst.
Public Sub VerweiseAusgeben() Dim objReference As vbide.Reference Dim objVBProject As VBProject Set objVBProject = VBE.ActiveVBProject For Each objReference In objVBProject.References Debug.Print "BuiltIn: " & objReference.BuiltIn Debug.Print "Description: " & objReference.Description Debug.Print "FullPath: " & objReference.FullPath Debug.Print "Guid: " & objReference.Guid Debug.Print "IsBroken: " & objReference.IsBroken Debug.Print "Major: " & objReference.Major Debug.Print "Minor: " & objReference.Minor Debug.Print "Name: " & objReference.Name Debug.Print "Type: " & objReference.Type Next objReference End Sub
Listing 1: Ausgabe der Verweise und ihrer Eigenschaften
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: