Fernsteuerung von Word aus VB

Intro

Immer wieder werde ich gefragt, wie man Word aus VB fernsteuern kann. Auch ich kann den Code jeweils nicht aus dem Kopf erzeugen. In diesem Tipp möchte ich zeigen, wie ich dieses Problem jeweils angehe. Eines im Voraus: Es ist garantiert kein Kunststück!

Verweis hinzufügen

In dem VB-Projekt, welches mit der Word-Fernsteuerung beglückt werden soll, füge ich als erstes einen Verweis auf die "Word Object Library" hinzu.

  1. Im Menü Projekt den Punkt Verweise anwählen.
  2. Den Eintrag "Microsoft Word 9.0 Object Library" anwählen. (Je nach installierter Word-Version kann die Zahl 9.0 ändern)
  3. Auf OK klicken.

Die Aufgabe als Makro aufzeichnen

Danach arbeite ich mit dem Makro-Recorder, welchen Word bietet, um den Code zu erhalten.

  1. Word starten.
  2. Den Makro-Recorder mit Extras->Makro->Aufzeichnen starten.
  3. Einen ansprechenden Namen eintippen. z.B. "Mahnung". Danach auf OK klicken.
  4. Manuell all das erledigen, was später automatisiert werden soll. (z.B. eine Mahnung schreiben)
  5. Wo später Variablen verwendet werden sollen, möglichst klaren Beispiel-Text verwenden. (z.B. "Sehr geehrter Herr Muster")
  6. Abschliessend die Makro-Aufzeichnung beenden.

Das Makro nach VB kopieren

Die Aufzeichnung hätte nichts gebracht, wenn du das Makro jetzt nur in Word verwenden könntest. Abschliessend zeige ich deshalb, wie man das erzeugte Makro in VB verwendet.

  1. Den Visual Basic-Editor starten (Extras->Makro->Visual Basic-Editor)
  2. Falls das nötige Wissen vorhanden ist, kann man das Makro kürzen. Denn v.a. wenn man grössere Texte schreibt, kann man den erzeugten Code erheblich kürzen. Das Optimieren des Codes muss aber nicht unbedingt sein, denn das Makro funktioniert auch so.
    Ein Beispiel für ein erzeugtes (und optimiertes) Makro kannst du herunterladen.
  3. Erst jetzt kommt VB zum Zug. Es muss eine Variable definiert werden, mit welcher wir auf Word zugreifen können. Mit folgender Deklaration haben wir ein Problem weniger ;-) Dim Word As New Word.Application
  4. Standardmässig wird kein neues Dokument angelegt. Deshalb müssen wir folgenden Code einfügen, um eines zu erstellen: Word.Documents.Add
  5. Wenn wir nun noch den folgenden With-Block einfügen, sind wir gerüstet: With Word.ActiveWindow ' Makro-Code End With
  6. Jetzt können wir den Makro-Code, welchen wir erzeugt haben, in VB rein kopieren. Und zwar wird der komplette Code in den With-Block eingefügt.
  7. Nun muss in jeder Zeile Code am Anfang ein Punkt geschrieben werden. Ein Beispiel ist da wahrscheinlich besser als Erklärungen: Aus dem Code Selection.TypeText Text:="Sehr geehrter Herr Muster" wird .Selection.TypeText Text:="Sehr geehrter Herr Muster" Man achte auf den Punkt am Zeilenanfang.
  8. Nun müssen noch alle Daten, welche variieren können, dynamisch eingefügt werden. Das kann so aussehen: Aus dem Code .Selection.TypeText Text:="Sehr geehrter Herr Muster" wird .Selection.TypeText Text:="Sehr geehrter Herr " & Nachname Hinweis: Ich möchte hier nicht die Damen diskriminieren, wenn ich von einem Herr ausgehe, sondern das Beispiel klein halten. ;-)
  9. Standardmässig wird Word versteckt angezeigt. Falls Word aber nach der ausgeführten Arbeit angezeigt werden soll, kann folgender Code eingefügt werden. (Nach dem With-Block) Word.Visible = True
  10. Du kannst ein Beispiel herunterladen. Es handelt sich um eine Sub, welche eine Mahnung in Word schreibt, und dann das Fenster anzeigt.