Wenn Sie per VBA mit Objekten wie Word, Excel, Outlook interagieren oder auf die Elemente externe Bibliotheken zugreifen möchten, die Objekte, Eigenschaften, Methoden und Ereignisse bereitstellen, können Sie dies auf zwei Arten erledigen: mit Early Binding oder mit Late Binding. Dieser Artikel erklärt die Vor- und Nachteile dieser beiden Vorgehensweisen anhand des Zugriffs auf eine Excel-Tabelle.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1209_EarlyUndLateBinding.mdb.
Beispiel
Das Beispiel für diesen Artikel ist einfach: Wir wollen einfach nur eine Excel-Instanz erstellen, ein neues Dokument anlegen und in der ersten Zelle der ersten Tabellen des Dokuments einen Wert eintragen. Dies erledigen auf zwei Arten: mit Early Binding und mit Late Binding. Beides bezieht sich auf die Art, wie Sie die Excel-Instanz deklarieren instanzieren und die im VBA-Code verwendeten Objekte deklarieren.
Early Binding
Beim Early Binding fügen Sie dem VBA-Projekt der Datenbank-Datei einen Verweis auf die Bibliothek Microsoft Excel x.0 Object Library hinzu. Dazu öffnen Sie den VBA-Editor (zum Beispiel mit Alt + F11), betätigen den Menübefehl Extras|Verweise und finden dann den Verweise-Dialog vor. Dort finden Sie, wenn Sie Office beziehungsweise Excel installiert haben, einen entsprechenden Eintrag in der Liste der verfügbaren Verweise vor und markieren diesen (siehe Bild 1).
Bild 1: Hinzufügen eines Verweises auf die Excel-Bibliothek
Damit teilen Sie dem VBA-Editor mit, dass Sie die in dieser Bibliothek definierten Objekte, Eigenschaften, Methoden und Ereignisse verfügbar machen wollen. Im VBA-Editor macht sich das Hinzufügen dieses Verweises zum Beispiel dadurch bemerkbar, dass das Excel-Objekt und seine Elemente beim Deklarieren verfügbar sind.
Dies probieren wir in einem neuen Standardmodul aus, das Sie mit dem Menübefehl Einfügen|Modul anlegen – speichern Sie dieses unter dem Namen mdlExcel.
Wenn Sie dort gleich oben eine Deklarationszeile wie die folgende Anlegen, bietet IntelliSense gleich das Excel-Objekt zur Auswahl an (siehe Bild 2):
Bild 2: Beim Early Binding stehen die Elemente der referenzierten Bibliothek per IntelliSense zur Auswahl bereit
Dim objExcel As Excel.Application
Auch die übrigen Elemente dieser Bibliothek stehen nun zur Deklaration bereit. Doch damit nicht genug: Wenn Sie nun ein Objekt auf Basis der Klasse Excel.Application erstellen, können Sie auch noch per IntelliSense auf seine Eigenschaften und Methoden zugreifen (siehe Bild 3).
Bild 3: Auch die Eigenschaften und Methoden der Objektvariablen werden per IntelliSense angezeigt.
Wenn Sie das Excel-Objekt in einem Klassenmodul deklarieren, können Sie dort sogar noch das Schlüsselwort WithEvents mit angeben (siehe Klassenmodul clsExcel – anlegen mit Einfügen|Klassenmodul, speichern unter clsExcel):
Dim WithEvents objExcel As Excel.Application
Sie können dann, genau wie bei den Ereignissen von Formularen oder den darin enthaltenen Steuerelementen, Ereignisprozeduren definieren, die bei bestimmten Ereignissen des entsprechenden Objekts ausgelöst werden.
Nur gibt es in diesem Fall kein Eigenschaftsfenster, mit dem Sie den Wert der Ereigniseigenschaft auf [Ereignisprozedur] festlegen und dann per Mausklick auf die Schaltfläche mit den drei Punkten die entsprechende Ereignisprozedur anlegen. Stattdessen erledigen Sie dies, indem Sie im linken Kombinationsfeld des Code-Fensters des entsprechenden Klassenmoduls das Objekt auswählen (das zwingend mit dem Schlüsselwort WithEvents deklariert sein muss) und dann im rechten Fenster das zu implementierende Ereignis selektieren (siehe Bild 4).
Bild 4: Einsatz von Ereignissen eines mit WithEvents deklarierten Objekts
Schließlich bietet der Einsatz einer per Early Binding referenzierten Bibliothek für viele Einsatzfälle Konstanten an, welche die eigentlich als Parameter zu verwendenden Zahlen besser lesbar machen.
Ein Beispiel ist das Format, unter dem ein frisch erstelltes Excel-Workbook gespeichert werden soll. In den folgenden Zeilen finden Sie die SaveAs-Methode des aktuellen Workbooks, die als zweiten und letzten Parameter die Konstante xlExcel7 verwendet:
Set objExcel = New Excel.Application With objExcel .Workbooks.Add .ActiveCell.Value = "A1" .ActiveWorkbook.SaveAs CurrentProject.Path _ & "\test.xls", xlExcel7 .Visible = True End With
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: