Visual Basic を使用して Word を自動化して差し込み印刷を作成する方法

概要

この記事では、Word を自動化して外部データソースの差し込み印刷を作成する方法について説明します。 この記事では、OLEDB、ODBC、および動的データ交換 (DDE) を使用してデータにアクセスする場合のコードの相違点についても説明します。

詳細

データアクセス方法

プログラムを使用して Word 差し込み印刷文書のデータソースを設定するには、まず、差し込み印刷オブジェクトの 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 の引数です。 これらの3つの引数の組み合わせによって、差し込み印刷のデータアクセス方法が異なります。

OLEDB の使用

OLEDB は推奨されるデータアクセス方法です。 OpenDataSource を使用して OLEDB をデータアクセス方法として指定するには、Name 引数に、データベースまたは Office データソース接続 (.odc) のいずれかのパスとファイル名を指定します。 引数 Name にデータベースを指定すると、データベース形式をサポートする OLEDB プロバイダーがインストールされている場合、Word は自動的に OLEDB を使用します。

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

or

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

Word およびその他の Office XP アプリケーションは、外部データソースへの OLEDB アクセスに Office DataSource オブジェクト (ODSO) を使用します。 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 の使用

Access データベースまたは Microsoft Excel ブックのデータにアクセスするには、DDE を使用します。 OpenDataSource を使用して DDE をデータアクセス方法として指定するには、データベースまたはブックへのパスとファイル名を引数 Name として指定します。また、引数 SubType には wdMergeSubTypeWord2000 を指定します。

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

オートメーションのサンプル

次のサンプルコードでは、OLEDB (ODSO) を使用して、フォームレターの差し込み印刷を作成して実行します。 使用されるデータソースは、サンプルの Access データベース Northwind.mdb です。 Northwind がインストールされていない場合は、Microsoft Access 2002 または Microsoft Office Access 2003 を起動します。 [ヘルプ] メニューの [サンプルデータベース] をクリックし、[ノースウィンドサンプルデータベース] を選択してこの機能をインストールします。

このサンプルを実行するには、次の手順を実行します。

  1. Visual Basic で新しい標準 EXE プロジェクトを開始します。 既定では、Form1 が作成されます。

  2. [プロジェクト] メニューの [参照設定] をクリックします。

  3. 参照の一覧で [ Microsoft Word 2000 Object Library ] をクリックし、[ OK] をクリックします。

    メモMicrosoft Office Word 2003 オブジェクトを使用するには、参照リストに Microsoft Word 11.0 オブジェクトライブラリを追加し、[ OK] をクリックします。

  4. CommandButtonコントロールを Form1 に追加します。

  5. Form1 のコードモジュールに次のコードを追加します。

    メモ必要に応じて、Office XP のインストールに合わせて Northwind.mdb へのパスを変更します。

    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 テーブルから抽出されたデータを含む差し込み印刷の結果である定型書簡が含まれています。

References

詳細については、Microsoft サポート技術情報の記事を参照してください。

285176 SQL SERVER の XML を使用してクライアント側の差し込み印刷を実行するように Word を自動化する方法