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.
- Im Menü Projekt den Punkt Verweise anwählen.
- Den Eintrag "Microsoft Word 9.0 Object Library" anwählen. (Je nach installierter Word-Version kann die Zahl 9.0 ändern)
- Auf OK klicken.
Die Aufgabe als Makro aufzeichnen
Danach arbeite ich mit dem Makro-Recorder, welchen Word bietet, um den Code zu erhalten.
- Word starten.
- Den Makro-Recorder mit Extras->Makro->Aufzeichnen starten.
- Einen ansprechenden Namen eintippen. z.B. "Mahnung". Danach auf OK klicken.
- Manuell all das erledigen, was später automatisiert werden soll. (z.B. eine Mahnung schreiben)
- Wo später Variablen verwendet werden sollen, möglichst klaren Beispiel-Text verwenden. (z.B. "Sehr geehrter Herr Muster")
- 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.
- Den Visual Basic-Editor starten (Extras->Makro->Visual Basic-Editor)
-
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. -
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 -
Standardmässig wird kein neues Dokument angelegt. Deshalb
müssen wir folgenden Code einfügen, um eines zu erstellen:
Word.Documents.Add -
Wenn wir nun noch den folgenden With-Block einfügen, sind
wir gerüstet:
With Word.ActiveWindow ' Makro-Code End With - 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.
-
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. -
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 " & NachnameHinweis: Ich möchte hier nicht die Damen diskriminieren, wenn ich von einem Herr ausgehe, sondern das Beispiel klein halten. ;-) -
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 - Du kannst ein Beispiel herunterladen. Es handelt sich um eine Sub, welche eine Mahnung in Word schreibt, und dann das Fenster anzeigt.