Home > Artikel > Ausgabe 3/2018 > Excel fernsteuern, Teil 1: Initialisierung

Excel fernsteuern, Teil 1: Initialisierung

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

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).

Verweis auf die Excel-Bibliothek

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.

Die Excel-Elemente im Objektkatalog

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).

Die frisch gestartete Excel-Instanz im Tast-Manager

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

Gegebenenfalls möchten Sie eine Excel-Instanz erstellen und nicht nur von der erstellenden Prozedur aus auf diese zugreifen. Dann ist es sinnvoll, die Instanzvariable direkt im Kopf eines Standardmoduls zu platzieren:

Option Compare Database

Option Explicit

Dim objExcel As Excel.Application

...

Sie würden dann eine Prozedur nutzen, um die Instanz zu erstellen:

Public Sub ExcelInstanzieren()

Set objExcel = New Excel.Application

End Sub

Eine weitere schließt die Instanz:

Public Sub ExcelBeenden()

Set objExcel = Nothing

End Sub

Excel-Instanz einblenden

Bisher haben wir noch nichts von unserer Excel-Instanz gesehen.

Dies holen wir nun nach, indem wir die Visible-Eigenschaft der Instanz-Variablen auf den Wert True einstellen:

Public Sub ExcelInstanzieren()

Set objExcel = New Excel.Application

objExcel.Visible = True

End Sub

Da wir die Instanzvariable nun global deklariert haben, bleibt die Instanz nun sogar erhalten, wenn die Prozedur bereits abgelaufen ist. In Bild 4 sehen Sie jedoch noch den Haltepunkt im Einsatz.

Die neue Excel-Instanz sichtbar gemacht

Bild 4: Die neue Excel-Instanz sichtbar gemacht

Um die Instanz nun zu beenden, führen Sie die weiter oben bereits erwähnte Prozedur ExcelBeenden aus. Im gleichen Moment verschwindet die Excel-Instanz vom Desktop.

Mit der hier vorgestellten Vorgehensweise erhalten Sie eine eigenständige Excel-Instanz. Damit haben Sie einen Vorteil gegenüber der gleich im Anschluss vorgestellten Variante, bei der wir zunächst schauen, ob es eine bereits laufende Excel-Instanz gibt und diese dann übernehmen. Sie brauchen dann nämlich keine Rücksicht auf eventuell bereits geöffnete Dokumente zu nehmen und können Ihre eigene Instanz nach der Verwendung beenden, ohne irgendwelche Daten des Benutzers zu gefährden.

Excel-Instanz kapern

Vielleicht möchten Sie aber genau das – nämlich eine bestehende Excel-Instanz zu übernehmen und diese zu steuern, indem Sie die enthaltenen Daten auslesen oder ändern. In diesem Fall können Sie die New-Methode natürlich nicht nutzen, sondern verwenden eine alternative Anweisung. Diese heißt GetObject und wird wie folgt aufgerufen:

Public objExcel As Excel.Application

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!