Automatisieren von Word mit Visual Basic zum Erstellen eines Seriendrucks

Zusammenfassung

In diesem Artikel wird erläutert, wie Sie Word automatisieren, um einen Seriendruck für eine externe Datenquelle zu erstellen. In diesem Artikel werden auch die Codeunterschiede zwischen dem Zugriff auf die Daten mit OLEDB, ODBC und dynamischem Datenaustausch (Dynamic Data Exchange, DDE) erläutert.

Weitere Informationen

Datenzugriffsmethoden

Um eine Datenquelle für ein Word-Seriendruckdokument programmgesteuert einzurichten, rufen Sie zuerst die OpenDataSource-Methode eines MailMerge-Objekts auf. Die Syntax für die OpenDataSource-Methode lautet wie folgt:

<MailMergeObject>.OpenDataSource(Name, [Format], [ConfirmConversions], [ReadOnly], [LinkToSource], [AddToRecentFiles], [PasswordDocument], [PasswordTemplate], [Revert],[WritePasswordDocument], [WritePasswordTemplate], [Connection], [SQLStatement], [SQLStatement1], [OpenExclusive], [SubType]) 

Hinweis

Eine vollständige Beschreibung der einzelnen Argumente finden Sie in der Microsoft Word Visual Basic-Onlinehilfe. Von primärem Interesse für die Verbindung mit einer externen Datenquelle sind die Argumente "Name", "Connection" und "SubType". Unterschiedliche Kombinationen dieser drei Argumente stellen unterschiedliche Datenzugriffsmethoden für den Seriendruck dar.

Verwenden von OLEDB

OLEDB ist die empfohlene Datenzugriffsmethode. Um OLEDB als Datenzugriffsmethode mit OpenDataSource anzugeben, geben Sie das Name-Argument mit dem Pfad und dem Dateinamen für die Datenbank oder eine Office DataSource-Verbindung (ODC) an. Wenn Sie eine Datenbank für das Argument Name angeben, verwendet Word automatisch OLEDB, wenn ein OLEDB-Anbieter installiert ist, der das Datenbankformat unterstützt.

Beispiel

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]"

oder

<MailMergeObject>.OpenDataSource Name:="C:\MyDataSource.odc", _
           SQLStatement:="SELECT * FROM [MyTable]"

Word und andere Office XP-Anwendungen verwenden das Office DataSource-Objekt (ODSO) für OLEDB-Zugriff auf externe Datenquellen. ODSO ist der einzige Mechanismus, mit dem Word mithilfe von OLEDB für einen Seriendruck auf Daten zugreifen kann. ODSO erfordert, dass das Name-Argument für OpenDataSource entweder ein vollständiger Pfad zu einer Datenbank oder ein vollständiger Pfad zu einer gültigen ODC-Datei ist. ODSO ignoriert alle Informationen im Connection-Argument.

Verwenden von ODBC

Sie können ODBC für den Seriendruck verwenden, um auf Daten zuzugreifen, für die ein Benutzerdatenquellenname (User Data Source Name, DSN) auf dem System eingerichtet wurde. Um ODBC als Datenzugriffsmethode mit OpenDataSource anzugeben, geben Sie eine leere Zeichenfolge für das Argument Name, eine ODBC-Verbindungszeichenfolge für das Argument Connection und wdMergeSubTypeWord2000 für das SubType-Argument an.

Beispiel

<MailMergeObject>.OpenDataSource Name:= "", _
     Connection:= "DSN=MySQLServerDSN;DATABASE=pubs;uid=sa;pwd=;", _
     SQLStatement:= "Select au_id, au_lname, au_fname from authors", _
     SubType:= wdMergeSubTypeWord2000

Verwenden von DDE

Sie können DDE verwenden, um auf Daten in Microsoft Access-Datenbanken oder Microsoft Excel-Arbeitsmappen zuzugreifen. Um DDE als Datenzugriffsmethode mit OpenDataSource anzugeben, geben Sie den Pfad und den Dateinamen für die Datenbank oder die Arbeitsmappe für das Argument Name und wdMergeSubTypeWord2000 für das SubType-Argument an.

Beispiel

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]", _
           SubType:=wdMergeSubTypeWord2000

Automatisierungsbeispiel

Der folgende Beispielcode erstellt und führt einen Seriendruck für Formularbuchstaben mithilfe von OLEDB (mittels ODSO) aus. Die verwendete Datenquelle ist die Access-Beispieldatenbank "Northwind.mdb". Wenn Northwind nicht installiert ist, starten Sie Microsoft Access 2002 oder Microsoft Office Access 2003. Klicken Sie im Menü "Hilfe " auf "Beispieldatenbanken", und wählen Sie dann "Northwind-Beispieldatenbank" aus, um dieses Feature zu installieren.

Führen Sie die folgenden Schritte aus, um dieses Beispiel auszuführen:

  1. Starten Sie ein neues Standard EXE-Projekt in Visual Basic. Standardmäßig wird Form1 erstellt.

  2. Klicken Sie im Menü "Projekt " auf "Verweise".

  3. Klicken Sie in der Liste der Verweise auf die Microsoft Word 2000-Objektbibliothek , und klicken Sie dann auf "OK".

    Hinweis Um das Microsoft Office Word 2003-Objekt zu verwenden, fügen Sie die Microsoft Word 11.0-Objektbibliothek in der Liste der Verweise hinzu, und klicken Sie dann auf "OK".

  4. Fügen Sie form1 ein CommandButton-Steuerelement hinzu.

  5. Fügen Sie dem Codemodul für Form1 den folgenden Code hinzu.

    Hinweis Wenn dies erforderlich ist, ändern Sie den Pfad zu "Northwind.mdb" so, dass er ihrer Installation für Office XP entspricht.

    Dim WithEvents oApp As Word.Application
    
    Private Sub Form_Load()
        'Start Word.
        Set oApp = CreateObject("Word.Application")
    End Sub
    
    Private Sub Command1_Click()
    
    Dim oMainDoc As Word.Document
        Dim oSel As Word.Selection
        Dim sDBPath as String
    
    'Start a new main document for the mail merge.
        Set oMainDoc = oApp.Documents.Add
    
    With oMainDoc.MailMerge
    
    .MainDocumentType = wdFormLetters
    
    'Set up the mail merge data source to Northwind.mdb.
            sDBPath = "C:\Program Files\Microsoft Office\" & _
                      "OfficeXP\Samples\Northwind.mdb"
            .OpenDataSource Name:=sDBPath, _
               SQLStatement:="SELECT * FROM [Customers]"
    
    'Add the field codes to the document to create the form letter.
            With .Fields
                Set oSel = oApp.Selection
                .Add oSel.Range, "CompanyName"
                oSel.TypeParagraph
                .Add oSel.Range, "Address"
                oSel.TypeParagraph
                .Add oSel.Range, "City"
                oSel.TypeText ", "
                .Add oSel.Range, "Country"
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Dear "
                .Add oSel.Range, "ContactName"
                oSel.TypeText ","
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText " This letter is to inform you..."
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Sincerely, [Your Name Here]"
            End With
        End With
    
    'Perform the mail merge to a new document.
        With oMainDoc
            .MailMerge.Destination = wdSendToNewDocument
            .MailMerge.Execute Pause:=False
        End With
    
    End Sub
    
    Private Sub oApp_MailMergeAfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document)
    
    'When the mail merge is complete, 1) make Word visible,
        '2) close the mail merge document leaving only the resulting document
        'open and 3) display a message.
        Doc.Close False
        oApp.Visible = True
        MsgBox "Mail Merge Complete: " & oApp.ActiveDocument.Name
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        Set oApp = Nothing
    End Sub
    
  6. Drücken Sie F5, um das Programm auszuführen.

  7. Klicken Sie auf das CommandButton-Steuerelement in Form1, um den Seriendruck auszuführen.

Wenn der Code abgeschlossen ist, wird Word mit einem geöffneten neuen Dokument sichtbar gemacht. Das neue Dokument enthält Formularbuchstaben, die aus einem Seriendruck mit Daten resultieren, die aus der Tabelle "Customers" in "Northwind.mdb" extrahiert werden.

References

Weitere Informationen finden Sie im Artikel in der Microsoft Knowledge Base:

285176 Automatisieren von Word zum Ausführen eines clientseitigen Seriendrucks mithilfe von XML aus SQL Server