Zugriff auf VBA-Projekte per VBProject

Die Klasse VBProject des Objektmodells zum Programmieren des VBA-Editors und der enthaltenen Elemente bietet einige interessante Eigenschaften, Methoden und Auflistungen. Diese schauen wir uns im vorliegenden Beitrag an. Hier wird deutlich, dass die VBProjects im VB-Editor nicht nur für Access-Datenbanken genutzt werden können, sondern auch noch für andere Anwendungen – es gibt nämlich einige Elemente, die unter Access nicht funktionieren.

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 VBProject-Klasse

Die VBProject-Klasse liefert die folgenden Methoden, Auflistungen und Eigenschaften:

  • BuildFileName: Gibt den Namen einer DLL zurück. Diese Eigenschaft hat unter Access keine Verwendung, da hier keine DLL erstellt werden kann.
  • Collection: Liefert einen Verweis auf die Collection, in der sich das VBProject-Element befindet. Diese sollte normalerweise nur ein Element enthalten, nämlich das aktuelle VBA-Projekt. Wenn Sie jedoch beispielsweise seit dem Start der aktuellen Access-Session ein Access-Add-In verwendet haben, finden Sie auch dessen VBProject-Element in der Auflistung.
  • Description: Diese Eigenschaft ist standardmäßig leer und kann in den Projekteigenschaften eingestellt werden (siehe weiter unten).
  • FileName: Liefert den Pfad zu der Datei, in der das aktuelle VBProject-Objekt gespeichert ist – in der Regel also die Datenbankdatei, von der aus Sie den VBA-Editor mit dem aktuellen Projekt geöffnet haben.
  • MakeCompiledFile: Führt beim Aufruf aus einem VBA-Projekt zu dem Fehler aus Bild 1 und ist laut Dokumentation zum Erstellen einer DLL für das aktuelle Projekt gedacht – was aber wohl nicht für VBA-Projekte von Access-Datenbanken gilt.
  • Fehler beim Aufruf der Methode MakeCompiledFile

    Bild 1: Fehler beim Aufruf der Methode MakeCompiledFile

  • Mode: Gibt den Modus des Projekts an. Kann die drei Werte vbext_vm_Run (0), vbext_vm_Break (1) oder vbext_vm_Design (2) annehmen. Auch diese Eigenschaft lässt sich in VBA-Projekten unter Access nicht sinnvoll nutzen. Wenn Sie einen Haltepunkt setzen, dieser im Code erreicht wird und Sie dann im Direktbereich Debug.Print VBE.ActiveVBProject.Mode ausgeben lassen, erhalten Sie dennoch den Wert 0.
  • Name: Liefert den Namen des VBA-Projekts, so wie er auch in den Eigenschaften festgelegt ist.
  • Protection: Kann die Werte vbext_pp_locked (1) oder vbext_pp_none (0) annehmen. Standardmäßig ist der Wert 0 eingestellt. Diesen Wert ändern Sie durch Vergeben eines Kennworts für das VBA-Projekt.
  • References: Liefert eine Auflistung der Verweise des aktuellen VBA-Projekts.
  • SaveAs: Nicht für Access-VBA-Projekte verfügbar.
  • Saved: Gibt an, ob es noch ungespeicherte Änderungen im VBA-Projekt gibt. True bedeutet, dass alle Änderungen gespeichert sind, False, dass noch nicht gespeicherte Änderungen vorliegen.
  • Type: Gibt den Typ des VBA-Projekts zurück. Es gibt die beiden Werte vbext_pt_HostProject (100) und vbext_pt_Standalone (101).
  • VBComponents: Liefert eine Auflistung aller VBComponent-Objekte.
  • VBE: Verweis auf das übergeordnete VBE-Objekt

Projekteigenschaften einstellen

Die weiter oben erwähnte Eigenschaft Description ist standardmäßig leer. Sie können diese füllen, indem Sie den Dialog [Projektname] – Projekteigenschaften öffnen, was Sie mit dem Menüeintrag Extras|Eigenschaften von [Projektname]… erledigen. Hier finden Sie auf der ersten Seite gleich die Eigenschaft Projektbeschreibung, die Sie mit einem beliebigen Text füllen können (siehe Bild 2).

Einstellen der Beschreibung eines VBA-Projekts

Bild 2: Einstellen der Beschreibung eines VBA-Projekts

Anschließend rufen Sie diesen Text mit der folgenden Anweisung beispielsweise im Direktbereich ab:

  VBE.ActiveVBProject.Description
Dies ist eine Projektbeschreibung.

Kennwortschutz aktivieren und abfragen

Den Kennwortschutz aktivieren Sie im gleichen Dialog, in dem Sie auch die Projektbeschreibung eingeben – allerdings auf der zweiten Registerseite unter Schutz. Um den Schutz zu aktivieren, setzen Sie einen Haken für die Option Projekt für die Anzeige sperren. (siehe Bild 3). Danach können Sie unten das Kennwort eingeben und nochmals bestätigen.

Festlegen des Kennwortschutzes

Bild 3: Festlegen des Kennwortschutzes

Schließen Sie den Dialog und die Datenbankanwendung und öffnen Sie diese erneut, erhalten Sie beim Versuch, auf das VBA-Projekt zuzugreifen, einen Dialog zur Eingabe des Kennworts (siehe Bild 4).

Abfrage des Kennworts

Bild 4: Abfrage des Kennworts

Um abzufragen, ob das VBA-Projekt geschützt ist, können Sie die folgende Prozedur nutzen, die gleich den passenden Text ausgibt. Die Prozedur referenziert das aktuelle VBA-Projekt und prüft, welchen Wert die Eigenschaft Protection liefert. Im Falle von vbext_pp_none ist das Projekt nicht geschützt, im Falle von vbext_pp_locked schon:

Public Sub VBAProjektGeschuetzt()
     Dim objVBProject As VBProject
     Set objVBProject = VBE.ActiveVBProject
     Select Case objVBProject.Protection
         Case vbext_pp_none
             MsgBox "Das VBA-Projekt ''" &  objVBProject.Name & "'' ist nicht geschützt."
         Case vbext_pp_locked
             MsgBox "Das VBA-Projekt ''"  & objVBProject.Name & "''  ist geschützt."
     End Select
End Sub

Damit können Sie zum Beispiel von einem Access-Add-In aus prüfen, ob ein VBA-Projekt, das mit diesem Add-In bearbeitet werden soll, geschützt ist, bevor es beim Zugriff auf eines der Elemente des VBA-Projekts einen Fehler auslöst.

Um dies nachzustellen, machen wir eine Kopie unserer Beispieldatenbank und speichern diese unter dem Namen VBAEditorProgrammieren_Geschuetzt.accdb im gleichen Verzeichnis wie die aktuelle Datenbank. Nun schützen Sie die Datenbank wie zuvor beschrieben mit einem Kennwort. Anschließend fügen Sie die Datenbank über den Verweise-Dialog als Verweis hinzu. Dazu klicken Sie im Verweise-Dialog auf Durchsuchen… und wählen im nun erscheinenden Dateiauswahldialog die geschützte Datenbank 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