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 オンライン ヘルプを参照してください。 外部データ ソースに接続する主な目的は、名前、接続、および SubType 引数です。 これら 3 つの引数の組み合わせによって、差し込み印刷のデータ アクセス方法が異なります。

OLEDB の使用

OLEDB は、推奨されるデータ アクセス方法です。 OpenDataSource のデータ アクセス方法として OLEDB を指定するには、Name 引数にパスとファイル名を指定して、データベースまたは Office DataSource 接続 (.odc) に指定します。 Name 引数にデータベースを指定すると、データベース形式をサポートする OLEDB プロバイダーがインストールされている場合、自動的に 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 は、差し込み印刷に OLEDB を使用して Word がデータにアクセスできる唯一のメカニズムです。 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

Automation サンプル

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

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

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

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

  3. 参照の一覧で [Microsoft Word 2000 オブジェクト ライブラリ ] をクリックし、[ 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 テーブルから抽出されたデータを含む差し込み印刷の結果として得られるフォーム文字が含まれています。

関連情報

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

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