RSS
StartseiteKnowledge LibraryTop 10Impressum

9.1 Wie kann ich Word von VB aus fernsteuern?

VB5-VB6

Von:  [Home]

Warum sich Stunden mit dem VB Printer Objekt herumschlagen, wenn nur paar Sektoren weiter eines der mächtigsten Textverarbeitungsprogramme schlummert mit Seitenvorschau, benutzerdefinierten Vorlagen, Layoutansicht u.v.a.? Gemeint ist Word 97/2000, welches nicht nur intern mit VBA automatisiert werden kann, sondern auch extern durch Visual Basic. Wie das geht, wird hier am Beispiel einer Mahnung erläutert:

1. Schritt: Verweise hinzufügen

In einem VB-Projekt, welches die Word-Fernsteuerung übernehmen soll, wird ein Verweis auf die "Word Object Library" hinzugefügt:

  1. Wählen Sie im Menü "Projekt" den Eintrag "Verweise" aus.

  2. Wählen Sie den Eintrag "Microsoft Word 9.0 Object Library" für Word 2000 bzw. "Microsoft Word 8.0 Object Library" für Word 97.

  3. Schließen Sie das Fenster mit "OK".

2. Die Aufgabe als Makro aufzeichnen

Um schnell und einfach den entsprechenden Code für ihr Vorhaben zu erhalten zeichnen Sie den Vorgang mit dem Makro Recorder auf:

  1. Word starten.

  2. Den Makro-Recorder unter Extras => Makro => Aufzeichen starten.

  3. 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")

  4. Abschliessend die Makro-Aufzeichnung beenden.

3. Das Makro nach VB kopieren

Die Aufzeichnung hätte nichts gebracht, wenn man das Makro jetzt nur in Word verwenden könnte. Deswegen wird abschließend noch erklärt, wie man das erzeugte Makro in VB verwendet:

  1. 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ößere 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 können Sie am Ende des Artikels herunterladen.

  2. Erst jetzt kommt Visual Basic zum Zug. Es muss eine Variable definiert werden, mit welcher wir auf Word zugreifen können. Dies geschieht mit folgender Deklaration:

    Dim Word As New Word.Application
  3. Standardmäßig wird kein neues Dokument angelegt. Deshalb müssen wir folgenden Code einfügen, um eines zu erstellen:

    Word.Documents.Add
  4. Wenn wir nun noch den folgenden With-Block einfügen, sind wir gerüstet:

    With Word.ActiveWindow
      ' ...
      ' Makro-Code
      ' ...
    End With
  5. Jetzt kann man den erzeugten Makro-Code in VB reinkopieren. Und zwar wird der komplette Code in den With-Block eingefügt.

  6. 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"

    Der Punkt ist entscheidend, dadurch wird angegeben, dass wir innerhalb des With-Konstrukts auf das Word.ActiveWindow - Objekt zugreifen wollen.

  7. Alle Daten, die variieren können, werdem dynamisch eingefügt. Das kann so aussehen:

    Aus dem Code:

    Selection.TypeText Text:="Sehr geehrter Herr Muster"

    wird:

    .Selection.TypeText Text:="Sehr geehrter Herr " & Nachname

    Natürlich muss auch die Anrede variieren, dies wäre jetzt aber zuviel.

  8. Da Word im Automatisierungs-Modus nicht sichtbar ist, können Sie die Word Instanz mit Word.Visible = True anzeigen, wenn Sie meinen es sei erforderlich.

Ein Beispiel in Form einer Sub Prozedur, die eine Mahnung in Word schreibt, könnte wie folgt aussehen:

Private Sub MahnungSchreiben(ByVal Nachname As String)
  Dim Word As Word.Application
  Set Word = New Word.Application

  Word.Documents.Add

  With Word.ActiveWindow.Selection
    .TypeText Text:="Sehr geehrter Herr " & Nachname
    .TypeParagraph
    .TypeParagraph
    .TypeText Text:="Leider mussten wir feststellen, dass Sie den Betrag " & _
                    "von Fr. 500.-, welchen wir Ihnen verrechnet hatten, " & _
                    "noch immer nicht einbezahlt haben. Da dies die dritte " & _
                    "Mahnung ist, werden wir rechtliche Schritte vorbereiten."
    .TypeParagraph
    .TypeParagraph
    .TypeText Text:="Mit freundlichen Grüssen"
    .TypeParagraph
    .TypeText Text:=vbTab & "Herr Grimmig"
    .TypeParagraph
    .TypeText Text:=vbTab & "Firma Wild AG"
  End With

  Word.Visible = True
End Sub