Tippt man irgendwo im VBA-Editor As
, öffnet IntelliSense eine Liste,
deren Einträge teils nichts mit VBA, sondern mit der Applikation zu tun haben und
sich je nach Applikation unterschieden. Was zur Verfügung steht, hängt davon ab, welche
Objektbibliotheken
eingebunden sind. Welche das sind, sieht man im Verweisfenster, das im Menü unter
Extras/Verweise
aufgerufen wird.
Verweise | ||
---|---|---|
Verfügbare Verweise: | ||
Visual Basic For Applications
Microsoft Access **.0 Object Libary OLE Automation Microsoft Office **.0 Object Libary Microsoft Office **.0 Access database engine Object Libary Microsoft Excel **.0 Object Libary Microsoft PowerPoint **.0 Object Libary Microsoft Word **.0 Object Libary Microsoft ActiveX Data Objects *.1 Libary |
Priorität |
|
Je nach eingebundenen Objektbibliotheken ändert sich der Funktionsumfang von VBA. Jede Bibliothek stellt dabei beispielsweise Klassenmodule und Aufzählungen zur Verfügung, wie wir sie inzwischen auch selbst erstellen könnten. Und tatsächlich könnte man auch eigene Officedateien hier einbinden und den darin enthaltenen Code entsprechend in anderen Officedateien nutzen.
VBA selbst steckt in der Bibliothek Visual Basic For Applications
,
weswegen diese Bibliothek immer eingebunden sein muss, genau wie die Objektbibliothek
der Hostanwendung. Für Microsoft Word wäre das z. B. die
Microsoft Word Object Libary
. Für manche Applikationen können weitere
Bibliotheken sinnvoll oder sogar nötig werden. So sieht man im obigen Beispiel einen
Verweis auf die Microsoft Office Access database engine Object Libary
,
die in Microsoft Access den Zugriff auf Abfragen via
VBA ermöglicht. Außerdem gibt es Bibliotheken, die den Funktionsumfang von VBA
erweitern, wie etwa um einen Dateidialog.
Je nachdem, welche Programme auf dem PC installiert sind, kann die Verweisliste sehr viel länger werden. Viele Programme ganz verschiedener Hersteller unterstützen sogenannte „Automation“ oder auch „OLE-Automation“, mit der ein anderes Programm auf dessen sogenannte ActiveX-Objekte zugreifen kann. Mit anderen Worten: Man kann damit ein solches Programm aus einem anderen heraus steuern. Sollte allerdings unser VBA-Code einmal auf einem anderen PC laufen und die entsprechende Anwendung ist dort nicht installiert, verursacht das natürlich einen Fehler.
Um eine Objektbibliothek zu nutzen, muss man sie einfach im Verweisfenster
zusätzlich zu den bestehenden Einträgen auswählen. Damit sind deren Funktionen
von vornherein mit eingebunden (sogenanntes Early Binding). Die folgende
Prozedur EarlyBinding
greift aus einer beliebigen Anwendung auf
Microsoft Word zu. Fehlt allerdings der Verweis auf die
Word-Bibliothek, nutzt auch die Fehlerprozedur nichts. Alternativ kann man auch
ohne Einbindung der Objektbibliothek programmieren (sogenanntes Late Binding).
Dann steht kein IntelliSense zur Verfügung, was das Programmieren etwas schwieriger
macht. Die Prozedur LateBinding
ist mit EarlyBinding
identisch, könnte aber einen eventuellen Fehler bei der Verwendung von
wd
auffangen.
Public Sub EarlyBinding() On Error GoTo FEHLER Dim wd As Word.Application Set wd = New Word.Application 'ohne Verweis erfolgt Kompilierfehler Debug.Print wd.Version Exit Sub FEHLER: Debug.Print Err.Number 'wird bei Kompilierfehler nicht aufgerufen End Sub
Public Sub LateBinding() On Error GoTo FEHLER Dim wd As Object Set wd = CreateObject("Word.Application") Debug.Print wd.Version Exit Sub FEHLER: Debug.Print Err.Number End Sub
Um die Vorteile von Early- und Late Binding zu vereinen, wird in der Praxis vielfach mit Early Binding entwickelt, das fertige Produkt dann aber als Late Binding genutzt. Um problemlos dazwischen umschalten zu können, bietet sich die bedingte Kompilierung an. Die Kompilerkonstante wird dann üblicherweise in den Projekteigenschaften gesetzt.
Public Sub Binding() On Error GoTo FEHLER #If EarlyBinding = True Then Dim wd As Word.Application 'Verweis notwendig! Set wd = New Word.Application #Else Dim wd As Object Set wd = CreateObject("Word.Application") #End If Debug.Print wd.Version Exit Sub FEHLER: Debug.Print Err.Number End Sub