如何使用 Visual Basic 將 Word 自動化以建立合併列印

摘要

本文討論如何自動化 Word 以建立外部資料源的合併列印。 本文也會說明使用 OLEDB、ODBC 和動態資料交換存取資料之間的程式碼差異, (DDE) 。

其他相關資訊

資料存取方法

若要以程式設計方式設定 Word 合併列印檔的資料來源,您必須先呼叫 MailMerge 物件的 OpenDataSource 方法。 OpenDataSource 方法的語法如下:

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

注意事項

如需每個引數的完整描述,請參閱 Microsoft Word Visual Basic 線上說明。 連線到外部資料源的主要興趣是 Name、Connection 和 SubType 引數。 這三個引數的不同組合代表合併列印的不同資料存取方法。

使用 OLEDB

OLEDB 是建議的資料存取方法。 若要使用 OpenDataSource 將 OLEDB 指定為數據存取方法,請提供 Name 引數與資料庫或 Office DataSource Connection (.odc) 的路徑和檔案名。 如果您提供 Name 引數的資料庫,如果已安裝支援資料庫格式的 OLEDB 提供者,Word 會自動使用 OLEDB。

範例

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

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

Word 和其他 Office XP 應用程式會使用 Office DataSource 物件 (ODSO) 來存取外部資料源的 OLEDB。 ODSO 是 Word 唯一可以使用 OLEDB 來進行合併列印來存取資料的機制。 ODSO 要求 OpenDataSource 的 Name 引數必須是資料庫的完整路徑,或是有效 ODC 檔案的完整路徑。 ODSO 會忽略 Connection 引數中的任何資訊。

使用 ODBC

您可以使用 ODBC 進行合併列印,以存取已在系統上設定使用者資料來源名稱 (DSN) 的資料。 若要使用 OpenDataSource 將 ODBC 指定為數據存取方法,請提供 Name 引數的空字串、Connection 引數的 ODBC 連接字串,以及針對 SubType 引數提供 wdMergeSubTypeWord2000。

範例

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

使用 DDE

您可以使用 DDE 來存取 Microsoft Access 資料庫或 Microsoft Excel 活頁簿中的資料。 若要使用 OpenDataSource 將 DDE 指定為數據存取方法,請將路徑和檔案名提供給資料庫或 Name 引數的活頁簿,以及針對 SubType 引數提供 wdMergeSubTypeWord2000。

範例

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

自動化範例

下列範例程式碼會透過 ODSO) ,使用 OLEDB (建立及執行表單字母的合併列印。 所使用的資料來源是範例 Access 資料庫 Northwind.mdb。 如果未安裝 Northwind,請啟動 Microsoft Access 2002 或 Microsoft Office Access 2003。 在 [ 說明] 功能表上,按一下 [ 範例資料庫],然後選擇 [Northwind 範例資料庫] 以安裝此功能。

若要執行此範例,請遵循下列步驟:

  1. 在 Visual Basic 中啟動新的標準 EXE 專案。 根據預設,會建立 Form1。

  2. 在 [ 專案] 功能表上,按一下 [ 參考]

  3. 按一下參考清單中的 [Microsoft Word 2000 物件 庫],然後按一下 [ 確定]

    注意 若要使用 Microsoft Office Word 2003 物件,請在參考清單中新增 Microsoft Word 11.0 物件程式庫,然後按一下 [ 確定]

  4. CommandButton 控制項新增至 Form1。

  5. 將下列程式碼新增至 Form1 的程式碼模組。

    注意 如有必要,請修改 Northwind.mdb 的路徑,以符合您的 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. 按 F5 執行程式。

  7. 按一下 Form1 上的 CommandButton 控制項以執行合併列印。

當程式碼完成時,Word 會在開啟新檔時顯示。 新檔包含合併列印所產生的表單字母,其中包含從 Northwind.mdb 的 Customers 資料表擷取的資料。

參考

如需詳細資訊,請檢視 Microsoft 知識庫中的文章:

285176如何從 SQL Server 將 Word 自動化,以使用 XML 執行用戶端合併列印SQL Server