Jak zautomatyzować program Word za pomocą języka Visual Basic w celu utworzenia korespondencji seryjnej

Podsumowanie

W tym artykule omówiono sposób automatyzowania programu Word w celu utworzenia korespondencji seryjnej dla zewnętrznego źródła danych. W tym artykule wyjaśniono również różnice w kodzie między uzyskiwaniem dostępu do danych za pomocą OLEDB, ODBC i dynamicznej wymiany danych (DDE).

Więcej informacji

Metody dostępu do danych

Aby programowo skonfigurować źródło danych dla dokumentu korespondencji seryjnej programu Word, należy najpierw wywołać metodę OpenDataSource obiektu MailMerge. Składnia metody OpenDataSource jest następująca:

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

Uwaga

Pełny opis każdego argumentu można znaleźć w pomocy online programu Microsoft Word Visual Basic. Głównym celem nawiązywania połączenia z zewnętrznym źródłem danych są argumenty Name (Nazwa), Connection (Połączenie) i SubType (Podtyp). Różne kombinacje tych trzech argumentów reprezentują różne metody dostępu do danych dla korespondencji seryjnej.

Korzystanie z OLEDB

OLEDB to zalecana metoda dostępu do danych. Aby określić OLEDB jako metodę dostępu do danych w usłudze OpenDataSource, podaj argument Nazwa ze ścieżką i nazwą pliku do bazy danych lub połączenia źródła danych pakietu Office (odc). Jeśli podasz bazę danych dla argumentu Name, program Word automatycznie użyje OLEDB, jeśli zainstalowano dostawcę OLEDB obsługującego format bazy danych.

Przykład

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

lub

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

Program Word i inne aplikacje pakietu Office XP używają obiektu Office DataSource Object (ODSO) na potrzeby dostępu OLEDB do zewnętrznych źródeł danych. ODSO to jedyny mechanizm, za pomocą którego program Word może uzyskiwać dostęp do danych przy użyciu protokołu OLEDB na potrzeby korespondencji seryjnej. Funkcja ODSO wymaga, aby argument Nazwa dla usługi OpenDataSource był pełną ścieżką do bazy danych lub pełną ścieżką do prawidłowego pliku ODC. Funkcja ODSO ignoruje wszelkie informacje w argumencie Połączenia.

Korzystanie z odbc

Aby uzyskać dostęp do danych, dla których skonfigurowano nazwę źródła danych użytkownika (DSN) w systemie, można użyć funkcji ODBC dla korespondencji seryjnej. Aby określić odbc jako metodę dostępu do danych z OpenDataSource, podaj pusty ciąg dla argumentu Name, parametry połączenia ODBC dla argumentu Połączenia i wdMergeSubTypeWord2000 dla argumentu SubType.

Przykład

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

Korzystanie z środowiska DDE

Za pomocą funkcji DDE można uzyskiwać dostęp do danych w Microsoft Access bazach danych lub skoroszytach programu Microsoft Excel. Aby określić DDE jako metodę dostępu do danych w usłudze OpenDataSource, podaj ścieżkę i nazwę pliku do bazy danych lub skoroszytu argumentu Name oraz wdMergeSubTypeWord2000 dla argumentu SubType.

Przykład

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

Przykład automatyzacji

Poniższy przykładowy kod tworzy i wykonuje korespondencję seryjną dla listów formularzy przy użyciu OLEDB (w drodze ODSO). Używanym źródłem danych jest przykładowa baza danych programu Access Northwind.mdb. Jeśli program Northwind nie jest zainstalowany, uruchom program Microsoft Access 2002 lub Microsoft Office Access 2003. W menu Pomoc kliknij pozycję Przykładowe bazy danych, a następnie wybierz pozycję Northwind Sample Database, aby zainstalować tę funkcję.

Aby uruchomić ten przykład, wykonaj następujące kroki:

  1. Uruchom nowy projekt standardu EXE w visual basic. Domyślnie tworzony jest formularz Form1.

  2. W menu Project (Projekt ) kliknij pozycję Odwołania.

  3. Kliknij pozycję Biblioteka obiektów programu Microsoft Word 2000 na liście odwołań, a następnie kliknij przycisk OK.

    Uwaga Aby użyć obiektu programu Microsoft Office Word 2003, dodaj bibliotekę obiektów programu Microsoft Word 11.0 na liście odwołań, a następnie kliknij przycisk OK.

  4. Dodaj kontrolkę CommandButton do formularza Form1.

  5. Dodaj następujący kod do modułu kodu formularza Form1.

    Uwaga Jeśli jest to konieczne, zmodyfikuj ścieżkę do pliku Northwind.mdb, aby była zgodna z instalacją pakietu 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. Naciśnij klawisz F5, aby uruchomić program.

  7. Kliknij kontrolkę CommandButton na formularzu Form1, aby wykonać korespondencję seryjną.

Po zakończeniu działania kodu program Word będzie widoczny z otwartym nowym dokumentem. Nowy dokument zawiera listy formularzy, które wynikają z korespondencji seryjnej zawierającej dane wyodrębnione z tabeli Customers w pliku Northwind.mdb.

Informacje

Aby uzyskać więcej informacji, zapoznaj się z artykułem w bazie wiedzy Microsoft Knowledge Base:

285176 Jak zautomatyzować program Word do wykonywania korespondencji seryjnej po stronie klienta przy użyciu kodu XML z SQL Server