Så här automatiserar du Word med Visual Basic för att skapa en koppling av dokument

Sammanfattning

Den här artikeln beskriver hur du automatiserar Word för att skapa en koppla dokument för en extern datakälla. Den här artikeln beskriver också kodskillnaderna mellan åtkomst till data med OLEDB, ODBC och dynamiskt datautbyte (DDE).

Mer information

Dataåtkomstmetoder

Om du programmatiskt vill konfigurera en datakälla för ett kopplat Word-dokument anropar du först metoden OpenDataSource för ett MailMerge-objekt. Syntaxen för metoden OpenDataSource är följande:

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

Obs!

En fullständig beskrivning av varje argument finns i onlinehjälpen för Microsoft Word Visual Basic. Av primärt intresse för att ansluta till en extern datakälla är argumenten Namn, Anslutning och SubType. Olika kombinationer av dessa tre argument representerar olika dataåtkomstmetoder för kopplade dokument.

Använda OLEDB

OLEDB är den rekommenderade dataåtkomstmetoden. Om du vill ange OLEDB som dataåtkomstmetod med OpenDataSource anger du argumentet Namn med sökvägen och filnamnet till antingen databasen eller en Office DataSource-anslutning (.odc). Om du anger en databas för argumentet Namn använder Word automatiskt OLEDB om det finns en OLEDB-provider installerad som stöder databasformatet.

Exempel

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

eller

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

Word och andra Office XP-program använder Office DataSource Object (ODSO) för OLEDB-åtkomst till externa datakällor. ODSO är den enda mekanism som Word kan komma åt data med hjälp av OLEDB för en koppling av dokument. ODSO kräver att argumentet Namn för OpenDataSource antingen är en fullständig sökväg till en databas eller en fullständig sökväg till en giltig ODC-fil. ODSO ignorerar all information i argumentet Anslutning.

Använda ODBC

Du kan använda ODBC för kopplat dokument för att komma åt data som ett användardatakällnamn (DSN) har konfigurerats för i systemet. Om du vill ange ODBC som dataåtkomstmetod med OpenDataSource anger du en tom sträng för argumentet Namn, en ODBC-anslutningssträng för anslutningsargumentet och wdMergeSubTypeWord2000 för argumentet SubType.

Exempel

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

Använda DDE

Du kan använda DDE för att komma åt data i Microsoft Access-databaser eller Microsoft Excel-arbetsböcker. Om du vill ange DDE som dataåtkomstmetod med OpenDataSource anger du sökvägen och filnamnet till databasen eller arbetsboken för argumentet Namn och wdMergeSubTypeWord2000 för argumentet SubType.

Exempel

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

Automation-exempel

Följande exempelkod skapar och kör en koppla dokumentkoppling för formulärbrev med hjälp av OLEDB (via ODSO). Datakällan som används är Access-exempeldatabasen Northwind.mdb. Om Northwind inte är installerat startar du Microsoft Access 2002 eller Microsoft Office Access 2003. På hjälpmenyn klickar du på Exempeldatabaser och väljer sedan Northwind Sample Database för att installera den här funktionen.

Följ dessa steg för att köra det här exemplet:

  1. Starta ett nytt Standard EXE-projekt i Visual Basic. Som standard skapas Form1.

  2. Klicka på ReferenserProjekt-menyn.

  3. Klicka på Microsoft Word 2000-objektbibliotek i listan med referenser och klicka sedan på OK.

    Observera Om du vill använda Microsoft Office Word 2003-objektet lägger du till Microsoft Word 11.0-objektbiblioteket i listan med referenser och klickar sedan på OK.

  4. Lägg till en CommandButton-kontroll i Form1.

  5. Lägg till följande kod i kodmodulen för Form1.

    Observera Om det behövs ändrar du sökvägen till Northwind.mdb så att den matchar installationen av Office XP.

    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. Tryck på F5 för att köra programmet.

  7. Klicka på kontrollen CommandButton på Form1 för att utföra koppla dokument.

När koden har slutförts visas Word med ett nytt dokument öppet. Det nya dokumentet innehåller formulärbrev som är resultatet av ett kopplat dokument som innehåller data som extraheras från tabellen Kunder i Northwind.mdb.

Referenser

Mer information finns i artikeln i Microsoft Knowledge Base:

285176 Så här automatiserar du Word för att utföra en dokumentkoppling på klientsidan med XML från SQL Server