Word mit VBA programmieren

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Genau wie in Outlook oder Excel gibt es auch in Word ausreichende Möglichkeiten, um sich wiederholende Vorgänge zu automatisieren oder zu vereinfachen. Dazu benötigen wir die Programmiersprache VBA und das Objektmodell zur Programmierung von Word und den darin angezeigten Dokumenten. Im vorliegenden Beitrag schauen wir uns zunächst einmal an, wie wir von außen, also beispielsweise von einer anderen Anwendung aus, eine Word-Instanz initialisieren und diese nutzen können. Bei den weiteren Beispielen starten wir jedoch direkt vom VBA-Projekt des aktuell geöffneten Word-Dokuments aus.

Vorbereitung

Die meisten der nachfolgend beschriebenen Techniken kannst Du sowohl von einem externen VBA-Projekt, also beispielsweise von Excel, Access oder Outlook oder auch von einer anderen Word-Instanz aus aufrufen.

Wenn Du jedoch eine andere Anwendung als Word nutzt, benötigst Du für den Early Binding-Zugriff, der die Nutzung von IntelliSense ermöglicht, einen Verweis auf die Bibliothek Microsoft Word 16.0 Object Library. Um diesen im jeweiligen VBA-Projekt einzurichten, aktivierst Du den VBA-Editor mit Alt + F11, wählst den Menüeintrag Extras|Verweise und fügst dort den genannten Eintrag hinzu.

Wenn Du im VBA-Projekt eines Word-Dokuments programmierst, musst Du diesen Verweis nicht hinzufügen, da er standardmäßig bereits enthalten ist.

Word-Instanz erstellen

Word ist wie Excel und im Gegensatz zu Outlook eine Anwendung, von der wir mehrere Instanzen erstellen können. Wenn Outlook bereits geöffnet ist und wir versuchen, mit Set objOutlook = New Outlook.Application eine neue Instanz von Outlook zu erstellen, erhalten wir lediglich einen Verweis auf die aktuell geöffnete Instanz. Wenn wir hingegen wie folgt eine Word-Objektvariable definieren und dieser mit dem Schlüsselwort New eine neue Instanz zuweisen, erhalten wir tatsächlich eine weitere Instanz von Word.

Diese machen wir schließlich auch noch sichtbar:

Dim objWord As Word.Application
Set objWord = New Word.Application
objWord.Visible = True

Von wo aus führen wir diesen Code nun aus, um eine neue Word-Instanz anzulegen? Dazu können wir einfach ein neues Word-Dokument öffnen und mit Alt + F11 den VBA-Editor öffnen (siehe Bild 1).

Der VBA-Editor mit einem Word-Projekt

Bild 1: Der VBA-Editor mit einem Word-Projekt

Hier sehen wir gleich zwei VBA-Projekte:

  • Normal: Dies ist das VBA-Projekt der Normal-Dokumentvorlage.
  • Projekt (WordProgrammieren): Dies ist das VBA-Projekt des aktuellen Word-Dokuments.

Wenn wir VBA-Prozeduren anlegen, müssen wir also zunächst entscheiden, mit welchem der beiden VBA-Projekte wir arbeiten wollen. Die Entscheidung ist einfach: Soll die Prozedur immer verfügbar sein, also wann immer wir ein Dokument auf Basis der Vorlage Normal.dotm erstellen, oder soll diese mit dem Dokument gespeichert und auch weitergegeben werden?

Wenn wir die Prozedur im VBA-Projekt der Normal-Standardvorlage speichern, ist sie beispielsweise nicht mehr verfügbar, wenn wir das Dokument weitergeben. Wenn wir also ein Dokument mit einem Automatismus ausstatten wollen, der beim Öffnen des Dokuments ausgelöst werden und Informationen vom Benutzer abfragen soll, müssen wir diesen im VBA-Projekt des Dokuments speichern.

Dokument zum Speichern des VBA-Projekts vorbereiten

Genau wie bei Excel-Dokumenten gibt es auch unter Word ein spezielles Dokumentformat, das die Speicherung von VBA-Code erlaubt. Dieses hat genau wie bei Excel eine entsprechende Dateiendung, in diesem Fall .docm statt .docx. Es reicht allerdings nicht aus, einfach die Dateiendung anzupassen. Du musst das Dokument im Format Word Dokument mit Makros (*.docm) speichern (siehe Bild 2).

Speichern des Dokuments mit VBA-Projekt

 

Schreibe einen Kommentar