VBA-Ereignisse in Word programmieren

Microsoft Word bietet für das Application- und für das Document-Objekt einige sehr interessante Ereignisse an. Diese können wir implementieren und damit auf verschiedene Benutzeraktionen wie das Öffnen, Speichern oder Schließen eines Dokuments oder auch auf andere Aktionen zu reagieren. In diesem Artikel stellen wir die Ereignisse vor und zeigen, wie Du diese implementieren und mit eigenem Code füllen kannst. Damit lernst Du, wie Du auf das Öffnen, Schließen oder Anlegen von Dokumenten reagieren kannst oder wie sich Ereignisse programmieren lassen, die beim Drucken oder Speichern ausgelöst werden. Auch Aktionen wie ein Doppelklick oder ein Rechtsklick auf die Inhalte des Word-Dokuments lassen sich damit steuern. Wie das gelingt, zeigen wir in diesem Artikel.

Voraussetzung: Das WithEvents-Schlüsselwort

Wenn wir Ereignisprozeduren für die Ereignisse einer Word-Instanz implementieren wollen, benötigen wir vor allem eines: Die Deklaration einer Objektvariablen für die Word-Instanz, und zwar mit dem Schlüsselwort WithEvents versehen:

Private WithEvents objWord As Word.Application

Diese Anweisung können wir nur in einem Klassenmodul platzieren, nicht jedoch in einem Standardmodul.

Das Modul ThisDocument des VBA-Projekts eines Word-Dokuments beispielsweise ist jedoch ein Klassenmodul, in dem wir diese Anweisung unterbringen können.

Die Änderung durch das WithEvents-Schlüsselwort ist nicht direkt sichtbar. Wenn wir allerdings auf das linke Auswahlfeld oben im Code-Fenster klicken, sehen wir nun die auf diese Weise deklarierte Variable objWord. Die Auswahl dieses Eintrags legt automatisch eine Prozedur für das Standard-Ereignis dieses Objekts an, in diesem Fall objWord_Quit:

Private Sub objWord_Quit()
End Sub

Danach können wir aus dem rechten Auswahlfeld die übrigen Ereignisse auswählen und so automatisch die entsprechenden Ereignisprozeduren anlegen lassen (siehe Bild 1).

Auswahl der Ereignisse des Application-Objekts

Bild 1: Auswahl der Ereignisse des Application-Objekts

Das ist praktisch, da wir uns so nicht zu merken brauchen, wie die einzelnen Ereignisprozeduren heißen müssen – was vor allem dann hilfreich ist, wenn diese auch noch die Angabe von Parametern erfordern.

Auf diese Weise legen wir gleich noch Ereignisprozeduren für die Ereignisse Document_BeforeClose, Document_BeforePrint, Document_BeforeSave, Document_Change, DocumentOpen, NewDocument und WindowSelectionChange an.

Für diese Ereignisprozeduren legen wir jeweils einen Haltepunkt an, um zu prüfen, ob und wann diese ausgelöst werden (siehe Bild 2).

Einige Ereignisprozeduren mit Haltepunkten

Bild 2: Einige Ereignisprozeduren mit Haltepunkten

Eines können wir jetzt schon sagen: Bevor wir objWord nicht auf die aktuelle Word-Instanz eingestellt haben, wird keines der Ereignisse ausgelöst. Also fügen wir die folgende Prozedur hinzu und rufen sie mit F5 auf:

Private Sub Initialize()
     Set objWord = Application
End Sub

Danach können wir beispielsweise das aktuelle Dokument speichern und lösen damit die Prozedur objWord_BeforeSave aus. Damit können wir bereits kleinere Aufgaben erledigen – welche das sind, schauen wir uns in den folgenden Abschnitten an.

Microsoft Word bietet für das Application- und für das Document-Objekt einige sehr interessante Ereignisse an. Diese können wir implementieren und damit auf verschiedene Benutzeraktionen wie das Öffnen, Speichern oder Schließen eines Dokuments oder auch auf andere Aktionen zu reagieren. In diesem Artikel stellen wir die Ereignisse vor und zeigen, wie Du diese implementieren und mit eigenem Code füllen kannst. Damit lernst Du, wie Du auf das Öffnen, Schließen oder Anlegen von Dokumenten reagieren kannst oder wie sich Ereignisse programmieren lassen, die beim Drucken oder Speichern ausgelöst werden. Auch Aktionen wie ein Doppelklick oder ein Rechtsklick auf die Inhalte des Word-Dokuments lassen sich damit steuern. Wie das gelingt, zeigen wir in diesem Artikel.

Voraussetzung: Das WithEvents-Schlüsselwort

Wenn wir Ereignisprozeduren für die Ereignisse einer Word-Instanz implementieren wollen, benötigen wir vor allem eines: Die Deklaration einer Objektvariablen für die Word-Instanz, und zwar mit dem Schlüsselwort WithEvents versehen:

Private WithEvents objWord As Word.Application

Diese Anweisung können wir nur in einem Klassenmodul platzieren, nicht jedoch in einem Standardmodul.

Das Modul ThisDocument des VBA-Projekts eines Word-Dokuments beispielsweise ist jedoch ein Klassenmodul, in dem wir diese Anweisung unterbringen können.

Die Änderung durch das WithEvents-Schlüsselwort ist nicht direkt sichtbar. Wenn wir allerdings auf das linke Auswahlfeld oben im Code-Fenster klicken, sehen wir nun die auf diese Weise deklarierte Variable objWord. Die Auswahl dieses Eintrags legt automatisch eine Prozedur für das Standard-Ereignis dieses Objekts an, in diesem Fall objWord_Quit:

Private Sub objWord_Quit()
End Sub

Danach können wir aus dem rechten Auswahlfeld die übrigen Ereignisse auswählen und so automatisch die entsprechenden Ereignisprozeduren anlegen lassen (siehe Bild 1).

Auswahl der Ereignisse des Application-Objekts

Bild 1: Auswahl der Ereignisse des Application-Objekts

Das ist praktisch, da wir uns so nicht zu merken brauchen, wie die einzelnen Ereignisprozeduren heißen müssen – was vor allem dann hilfreich ist, wenn diese auch noch die Angabe von Parametern erfordern.

Auf diese Weise legen wir gleich noch Ereignisprozeduren für die Ereignisse Document_BeforeClose, Document_BeforePrint, Document_BeforeSave, Document_Change, DocumentOpen, NewDocument und WindowSelectionChange an.

Für diese Ereignisprozeduren legen wir jeweils einen Haltepunkt an, um zu prüfen, ob und wann diese ausgelöst werden (siehe Bild 2).

Einige Ereignisprozeduren mit Haltepunkten

Bild 2: Einige Ereignisprozeduren mit Haltepunkten

Eines können wir jetzt schon sagen: Bevor wir objWord nicht auf die aktuelle Word-Instanz eingestellt haben, wird keines der Ereignisse ausgelöst. Also fügen wir die folgende Prozedur hinzu und rufen sie mit F5 auf:

Private Sub Initialize()
     Set objWord = Application
End Sub

Danach können wir beispielsweise das aktuelle Dokument speichern und lösen damit die Prozedur objWord_BeforeSave aus. Damit können wir bereits kleinere Aufgaben erledigen – welche das sind, schauen wir uns in den folgenden Abschnitten an.

Access, SQL und Cloud Automation

Unser exklusives Angebot für Dich!

VB-Entwickler
12,50 € im Monat*

(Gilt für den Abschluss eines Jahres-Abonnements.)

Hier geht’s weiter →

Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.

PayPal VISA Mastercard SEPA
Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →