Word, Excel und Co. im Griff

Wollten Sie nicht schon immer mal die komplette Kontrolle über Word, Excel und Co. haben Naja, so ganz wird das wohl nie was werden, aber wir tun, was wir können. Zumindest erfahren Sie in diesem Beitrag, wie Sie Office-Anwendungen starten und in Ihrer Access-Anwendung auf verschiedene Ereignisse wie das Öffnen eines Dokuments oder das Beenden der Office-Anwendung reagieren können.

Umtriebige Access-Entwickler verwenden Excel und Word als Reporting-Tools, packen Produktkataloge aus der Tabelle in die PowerPoint-Präsentation oder interagieren mit Outlook, um Mails zu versenden, Kontakte zu synchronisieren oder Termine zu koordinieren. Dazu öffnen sie meist eine neue Instanz der jeweiligen Anwendung (soweit möglich) oder greifen einfach auf eine bestehende zu. Sie erstellen neue Dokumente zum Füllen, öffnen bestehende Dokumente zum Auslesen oder ändern.

Starten und beenden, öffnen und schließen

Damit bei der Arbeit mit Office-Anwendungen, die per VBA automatisiert geöffnet wurden, keine Rückstände wie geöffnete Dokumente oder Anwendungen bleiben und andererseits keine Anwendungen geschlossen werden, die der Benutzer zuvor selbstständig geöffnet hat, kann man sich einiger Features der Objektmodelle der Office-Anwendungen bedienen. Dabei sollten Sie die folgenden Varianten berücksichtigen:

  • Sie starten eine neue Instanz einer Anwendung. Dann sollten Sie diese auch anschließend wieder schließen.
  • Sie verwenden eine bestehende Anwendung. Dann sollte diese anschließend nicht geschlossen werden, da der Benutzer sonst möglicherweise recht konsterniert wäre.
  • Sie öffnen oder erstellen ein Dokument in einer Anwendung (egal, ob diese extra gestartet oder „gekapert“ wurde): Dann schließen Sie das Dokument anschließend auch wieder.

Neue Instanz

Heutzutage sollte ein Rechner nicht mehr in die Knie gehen, nur weil eine zweite oder auch dritte Instanz von Word oder Excel geöffnet wurde. Daher empfehlen wir, gar nicht erst zu prüfen, ob eventuell bereits eine Instanz geöffnet ist, sondern gleich eine neue zu öffnen.

Da Sie in den meisten Fällen etwas per VBA mit der Instanz erledigen möchten, speichern Sie einen Verweis auf die jeweilige Anwendung in einer Objektvariablen, die zum Beispiel so aussieht (wir verwenden Word in diesem Beitrag als Beispielanwendung – für die übrigen Office-Anwendungen sieht dies aber ähnlich aus):

Dim objWord As Word.Application

Für diese Variante brauchen Sie einen Verweis auf die jeweilige Bibliothek (Extras|Verweise, dort Microsoft x y.0 Object Library anhaken – x durch Word, Excel, PowerPoint oder Outlook und y durch die Versionsnummer ersetzen, zum Beispiel 12 für Office 2007).

Wer ohne Verweis auskommen und somit eine höhere Wahrscheinlichkeit erzielen möchte, dass die Anwendung versionsübergreifend eingesetzt werden kann, verwendet diese Deklaration:

Dim objWord As Object

Dafür fallen aber Vorteile wie IntelliSense (automatisches Einblenden von Methoden und Eigenschaften im VBA-Editor) und die Verwendung von Konstanten weg. Unsere Empfehlung: Mit Verweis und Early Binding programmieren, vor Auslieferung Verweis rauswerfen und auf Late Binding umsteigen. Eine neue Instanz erstellen Sie mit den folgenden beiden Aufrufen für Early Binding und Late Binding:

Set objWord = New Word.Application
Set objWord = CreateObject("Word.Application")

Ein neues Dokument erstellen Sie unter Word zum Beispiel mit folgender Anweisung. Die Objektvariable objDocument speichert den Verweis auf das Dokument:

Dim objDocument As Word.Document
Set objDocument = objWord.Documents.Add

Es gibt noch andere Varianten und Sie können auch bestehende Dokumente öffnen, aber wir brauchen einfach nur einen Verweis auf irgendein Dokument. Wenn Sie einen Verweis auf ein Dokument besitzen, können Sie dieses auch kontrolliert schließen:

objDocument.Close

Diese Methode besitzt unter anderem einen Parameter namens SaveChanges, mit dem Sie angeben, ob änderungen gespeichert (True) oder das Dokument einfach so geschlossen werden soll (False).

Wenn Sie ein neues Dokument anlegen und dieses ohne änderung mit Close schließen, wird es übrigens nicht gespeichert.

Erst nach einer änderung des erzeugten Dokuments fragt Word nach dem Dateinamen und Speicherort. Um ein leeres Dokument zu speichern, müssen Sie explizit die Save– oder SaveAs-Methode verwenden.

Die Word-Instanz beenden Sie mit der Quit-Methode, die ebenfalls den Parameter SaveChanges anbietet. Anschließend sollten Sie Objektvariablen für Dokumente und Anwendungen leeren:

Set objDocument = Nothing
Set objWord = Nothing

Für Excel und PowerPoint funktioniert obiges prinzipiell genauso, auch wenn die Objekte anders heißen.

Das Starten einer Excel-Instanz, das Erstellen eines Workbooks und das anschließende kontrollierte Schließen erfordert unter Early Binding beispielsweise die folgenden Schritte:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add
objWorkbook.Close
objExcel.Quit
Set objWorkbook = Nothing
Set objExcel = Nothing

Und Sie können dies, einen entsprechenden Verweis vorausgesetzt, auch mit PowerPoint durchführen:

Dim objPowerPoint As PowerPoint.Application
Dim objPresentation As PowerPoint.Presentation
Set objPowerPoint = CreateObject("PowerPoint.Application)"
objPowerPoint.Visible = True
Set objPresentation = objPowerPoint.Presentations.Add
objPowerPoint.Quit
Set objPresentation = Nothing
Set objPowerPoint = Nothing

Überwachung

Es kann aber auch sein, dass Sie eine Office-Anwendung starten und ein Dokument öffnen, mit dem der Benutzer etwas erledigen soll. Nach der Durchführung dieser Arbeiten durch den Benutzer soll Access benachrichtigt werden, um beispielsweise ein neu erzeugtes Dokument in eine Liste aufzunehmen oder den Inhalt dieses Dokuments zu verarbeiten.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar