エクセル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