【VBA】ワードファイルの指定文字列部分に外部ファイルの内容を挿入する

エクセルVBAで使うコードの備忘録。VBAでワードファイルを操作して、指定した文字列部分を別のワードファイルの内容に置き換えるコード。

スポンサーリンク

事前準備

VBAでワードファイルを操作するには、参照設定が必要です。VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れておきます。

別のワードファイルの内容を全てコピーする

今回は、ワードファイル内のある文字列を別のワードファイルの内容すべてに置き換えます。用途としては、別のワードファイルの内容を挿入する際などに使えます。挿入だけであればページの指定すればよいではないかと思われるかもしれませんが、何らかの理由で挿入するページが変わりうる場合は、明確に挿入場所を文字列で指定してそこに挿入する必要が出てきます。

実装の方法はいたってシンプルです。 (1)挿入したいファイルの内容を全てコピー。 (1)挿入場所を示す文字列を検索してそこに貼付。

下記のサンプルコードでは上記の二つのステップで操作を行っています。挿入したいファイルの内容をコピーする方法はいくつもありますが、今回は文書の冒頭と末尾をSelectionオブジェクトに設定することで指定しています。

またマイナーな点ですが、置換対象となる文字列が複数存在する場合は、冒頭から検索して一番初めに見つかったもののみをファイルの内容に置換するようにしてあります。もし複数すべてにをファイル内容に置き換えたい場合には、一番最後のIf文による分岐をなくしてやればOKです。

なお、サンプルコードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

サンプルコード

Public Sub InsertWordFile()

    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    '--- ドキュメントオブジェクト(挿入先) ---'
    Dim objDocOrg As Word.Document
    Set objDocOrg = objWord.Documents.Open("[挿入先ファイルのパス]")
    
    '--- ドキュメントオブジェクト(被挿入側) ---'
    Dim objDocIns As Word.Document
    Set objDocIns = objWord.Documents.Open("[被挿入ファイルのパス]")
    
    '--- 挿入する文書全体をコピー ---'
    objDocIns.Activate
    Call objWord.Selection.EndKey(Unit:=wdStory)
    objWord.Selection.Start = 0
    objWord.Selection.Copy
    
    '--- ワードファイルと置換する文字列 ---'
    Dim tagStr As String
    tagStr = "[置換する文字列]"
    
    '--- カーソルを冒頭 ---'
    objDocOrg.Activate
    objWord.Selection.Start = 0
    objWord.Selection.End = 0
    
    '--- 検索文字列を設定 ---'
    objWord.Selection.Find.Text = tagStr
    
    '--- 検索し貼付(初めに見つかったもののみ) ---'
    Dim i As Long
    Do While objWord.Selection.Find.Execute
        
        i = i + 1
        If (i = 1) Then
            objWord.Selection.Paste
        Else
            Exit Do
        End If
        
    Loop
    
End Sub