Wahrscheinlich sind Sie schon einmal auf Begriffe gestoßen, wie Verweise, VBA-Bibliotheken oder Type Libraries. Alle bezeichnen dabei dieselbe Sache. Klären wir auf, was es damit auf sich hat, und wie Sie als VBA-Programmierer mit VBA-Bibliotheken umgehen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1507_Libraries.zip.
Das VBA-Projekt
Sobald Sie in eine Datenbank neu anlegen, erzeugt Access automatisch auch ein VBA-Projekt in ihr, das zunächst den gleichen Namen trägt, wie die Datei. öffnen Sie den VBA-Editor, so steht dieser Name ganz oben im Projekt-Explorer. Dieser Name bezeichnet bereits die grundlegende Bibliothek des VBA-Projekts dieser Datenbank. Der Inhalt dieser Bibliothek wäre die Sammlung von Modulen und Klassen mit ihren Methoden, die Sie gegebenenfalls entwickeln.
Verweise
VBA funktioniert grundsätzlich nicht ohne solche Bibliotheken. Um bestimmte Funktionen und Anweisungen ausführen zu können, benötigt es eine Referenz auf diese. Von Haus aus weiß es nichts über Namen, wie Left, Right, Abs, CurrentDb, und so weiter. All diese Namen müssen aus Bibliotheken kommen, die erstens die Bezeichnungen kennen, und zweitens den Ort, wo sich die Funktionen befinden, auf die sie sich beziehen.
Auf den ersten Blick ist dieser Zusammenhang nicht unbedingt gleich ersichtlich. Denn beim Anlegen des VBA-Projekts einer Datenbank legt Access sogleich Referenzen auf zwei Bibliotheken fest, die Teil der Office-Installation sind: VBA und Access. Das sind die beiden grundlegenden Bibliotheken, mit denen unter VBA einer Datenbank gearbeitet wird.
Left und Right etwa stammen aus der Bibliothek VBA, während CurrentDb Teil der Access–Library ist. Type Library, kurz Library, und Bibliothek sind synonyme Bezeichnungen. Während diese Begriffe auch unter anderen Programmiersprachen gängig sind, spricht man unter VBA eher von Verweisen, oder englisch References. Korrekt wäre eigentlich die ausführliche Bezeichnung Verweis auf eine Bibliothek.
Welche Bibliotheken in das VBA-Projekt der aktuellen Datenbank integriert sind – ohne Datenbank auch kein VBA-Projekt und somit keine Bibliotheken -, erfahren Sie über den Verweise-Dialog des VBA-Editors. öffnen Sie ihn über sein Menü und die Abfolge Extras|Verweise… . Dort (siehe Bild 1) finden Sie links eine Liste mit allen Bibliotheken, die auf Ihrem Rechner zur Verfügung stehen. über die Kontrollkästchen können Sie darin beliebige Einträge aktivieren oder deaktivieren. Nach dem Schließen des Dialogs über OK sind die jeweiligen Bibliotheken dann in das VBA-Projekt integriert oder aus ihm entfernt. Um zu erläutern, woher die Einträge dieser Liste überhaupt kommen und wie sie funktionieren, ist etwas weiter auszuholen.
Bild 1: Der Verweise-Dialog für die Bibliotheken von VBA
VBA holt sie sich aus der Registry von Windows und da aus dem Zweig HKEY_CLASSES_ROOT\TypeLib. Dort stehen alle Bibliotheken, die im System installiert wurden. Genauer gesagt handelt es sich um sogenannte COM-Bibliotheken, oft auch als ActiveX-Komponenten bezeichnet. Zu beschreiben, wie diese Komponenten genau arbeiten und wie die Registry-Schlüssel mit ihnen zusammenhängen, würde hier zu weit führen. Wesentlich ist nur, dass diese COM-Bibliotheken durch Installation von Komponenten zustande kamen und eine Art Inhaltsverzeichnis darstellen. über die GUID-Schlüssel wird eine Verbindung von Name der Bibliothek und der ausführbaren Datei hergestellt, die in der Regel als DLL daher kommt, oder als EXE-Datei. Ein VBA-Verweis ist also nichts anderes, als eine Referenz auf eine ausführbare Datei samt ihrer Funktionsliste.
Diese speziellen COM-DLLs unterscheiden sich von anderen dadurch, dass sie außer den enthaltenen Exportfunktionen eben auch noch eine integrierte Type Library aufweisen. Nur diese kann VBA lesen. Der Objektkatalog von VBA ist fähig, ihren Inhalt darzustellen. Es gibt aber zusätzlich auch solche Verweise, die nur aus einer Type Library bestehen und gar keine binären Funktionen enthalten. Das sind etwa die Dateien mit der Endung tlb oder olb. Ein Beispiel wäre die Access-Bibliothek selbst, die in der Datei msacc.olb steckt, welche sich im Office-Installationsverzeichnis befindet. Bei erfolgreicher Installation von Access hat sie sich selbst als Type Library in die Registry eingetragen.
Dort findet VBA sie und lädt ihren Inhalt, also das Verzeichnis aller Funktionen von Access, falls ein Verweis auf sie im VBA-Projekt der Datenbank eingetragen ist. Das allerdings ist immer der Fall. Sie können ihn über den Verweise-Dialog auch gar nicht entfernen. Access verhindert die Manipulation der Access-Bibliothek, wie auch die von VBA. Mit alle anderen Verweisen können Sie verfahren, wie Sie möchten.
Sehen wir uns die Funktionsweise folgender VBA-Zeile an:
S = Mid$("ACCESS BASICS", 8, 2) > "BA"
Der Parser von VBA analysiert sie und stößt auf den ihm unbekannten Ausdruck Mid$. Daraufhin klappert er die Namen der Funktionen aller geladenen Bibliotheken ab und wird unter VBA fündig. Deren Klasse Strings enthält diese Funktion Mid$. Weil es eine globale Funktion ist, deren Klasse immer zur Verfügung steht und nicht erst instanziiert werden muss, ist dieser Funktionsname gültig. Im weiteren Verlauf schaut der Parser nach der ausführbaren Datei, welche diese Funktion enthält. Er erfährt dies aus der Registry, wo festgehalten wurde, dass die Datei vbe6.dll für den Verweis verantwortlich sei. Im Windows-Suchpfad findet er sie schließlich unter Common Files\ Microsoft Shared\VBA und lädt sie in den Prozess von Access. Da die Funktion Teil einer Objektklasse Strings ist, wird weiter automatisch eine Instanz dieser Klasse erzeugt. Nun kann in ihrem Interface die Funktion Mid$ angesprungen werden, deren Speicheradresse ebenfalls über die Type Library ermittelt wird. Die Parameter für die Funktion können jetzt übergeben werden.
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: