Von Access aus können Sie andere Anwendungen per VBA fernsteuern, wenn diese Anwendung dies unterstützt. Das ist grundsätzlich bei den übrigen Office-Anwendungen wie Excel, Outlook, Word oder PowerPoint der Fall. In dieser Artikelserie schauen wir uns an, wie Sie eine Excel-Anwendung fernsteuern können und wie Sie Dokumente anlegen, Daten in eine Excel-Tabelle schreiben oder die Daten auslesen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1803_AccessUndExcelFernsteuern.accdb.
Early Binding und Late Binding
Sie können eine Anwendung wie etwas Microsoft Excel auf verschiedene Arten referenzieren, wenn Sie diese fernsteuern wollen. Die unterschiedlichen Herangehensweisen heißen Early Binding und Late Binding. Diese beiden haben wir bereits in einem früheren Artikel namens Early Bindung und Late Binding erläutert. Im vorliegenden Beitrag wollen wir die Technik Early Binding nutzen, da dies eine komfortablere Programmierung ermöglicht.
Dazu fügen wir dem VBA-Projekt der aktuellen Access-Datenbank einen Verweis auf die Bibliothek Microsoft Excel x.0 Object Library hinzu, wobei das x für die auf Ihrem Rechner installierte Version von Microsoft Excel handelt. Um dies zu erledigen, öffnen Sie den VBA-Editor – beispielsweise mit der Tastenkombination Alt + F11 -, und rufen dann den Menüeintrag Extras|Verweise auf. Hier suchen Sie den gewünschten Eintrag aus und markieren diesen über das entsprechende Kontrollkästchen (siehe Bild 1).
Bild 1: Verweis auf die Excel-Bibliothek
Wenn Sie nun mit der Taste F2 oder dem Menüeintrag Ansicht|Objektkatalog den Objektkatalog öffnen, finden Sie dort im oberen Kombinationsfeld den Eintrag Excel vor.
Wählen Sie diesen aus, erscheinen unten alle Elemente der Excel-Bibliothek (siehe Bild 2). Dies ist eine gute Anlaufstelle, wenn Sie einmal nach bestimmten Klassen, Methoden, Eigenschaften oder Ereignissen suchen wollen.
Bild 2: Die Excel-Elemente im Objektkatalog
Excel-Instanz erstellen
Bevor wir auf die Daten einer Excel-Datei zugreifen können, um diese entweder einzulesen oder auch zu ändern, benötigen wir Zugriff auf eine Excel-Instanz. Das kann eine laufende Instanz sein, also eine solche, die der Benutzer bereits geöffnet hat, oder wir erstellen einfach per VBA-Code eine neue Instanz.
In beiden Fällen wollen Sie einen Verweis auf die Excel-Instanz in einer Objektvariablen speichern, um später über diese auf die Excel-Instanz zuzugreifen. Diese deklarieren wir wie folgt, zunächst in einer einfachen Prozedur, die wir in einem Standardmodul anlegen:
Public Sub ExcelInstanzieren() Dim objExcel As Excel.Application End Sub
Neue Instanz erstellen
Nun wollen wir eine neue Excel-Instanz erstellen und den Verweis darauf in der Variablen objExcel speichern. Das geht so:
Public Sub ExcelInstanzieren() Dim objExcel As Excel.Application Set objExcel = New Excel.Application End Sub
Dies erstellt eine neue Excel-Instanz. Diese verschwindet aber genau so schnell wieder, wie sie erstellt wurde, denn ihre Variable ist ja nur lokal in der Prozedur deklariert. Wenn die Prozedur beendet und somit die Variable zurückgesetzt wird, verschwindet auch die Excel-Instanz wieder (die Sie an dieser Stelle übrigens noch nicht einmal sehen).
Ob das wirklich geschieht, können Sie folgendermaßen testen: Setzen Sie einen Haltepunkt auf die Zeile End Sub. Wenn Sie die Prozedur nun mit der Taste F5 starten, bleibt die Prozedur an dieserm Haltepunkt stehen. An dieser Stelle öffnen Sie nun den Task-Manager (einfach Task-Manager in die Suchen-Box von Windows eingeben und die Eingabetaste betätigen) und schauen, ob es dort einen Eintrag namens Microsoft Excel (32 Bit) gibt (gegebenenfalls auch Microsoft Excel (64 Bit)). Dieser Eintrag sollte etwa unter Windows 10 im Bereich Hintergrundprozesse zu finden sein (siehe Bild 3).
Bild 3: Die frisch gestartete Excel-Instanz im Tast-Manager
Lassen Sie die Routine nun weiterlaufen, verschwindet auch diese Instanz schnell wieder aus dem Task Manager. Sie können auch mehrere Instanzen gleichzeitig starten. Dazu benötigen Sie dann auch mehrere Objektvariablen. Der folgende Code liefert beispielsweise gleich zwei Einträge für Excel im Task-Manager:
Dim objExcel As Excel.Application Dim objExcel2 As Excel.Application Set objExcel = New Excel.Application Set objExcel2 = New Excel.Application
Instanzvariable global deklarieren
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: