Wordマクロでは、Wordだけでなく他のアプリの処理も合わせて自動化することができます。
今回は、Excelで作成したリストを使って、Word文書を連続置換するマクロを例に説明します。
準備
Excelで置換リストを作成する
Excelブックに検索語句と置換語句の組み合わせのリストを作成して、範囲に名前を付けます。
ライブラリの参照を設定する
Word VBAの編集画面(VBE)で、[ツール]-[参照設定]をクリックします。[参照設定]ダイアログボックスで「Microsoft Excel 16.0 Object Library」をチェックして[OK]をクリックします。
コードサンプルと解説
Sub Excelリストで連続置換()
Dim appXL As Excel.Application
Dim wbXL As Excel.Workbook
Dim aryRep As Variant
Dim r As Long
'Excelを開いて名前付き範囲を2次元配列に格納
Set appXL = New Excel.Application
Set wbXL = wbXL.Workbooks.Open("D:\test\置換リスト.xlsx")
aryRep = wbXL.Worksheets("リスト").Range("置換リスト")
'appXL.Visible = True 'ユーザー操作なしのため非表示のまま
'ブックを閉じてExcelを終了
appXL.Quit SaveChanges:=False
'Word文書を連続処理
With ActiveDocument.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = False
.MatchFuzzy = False
'配列に従って連続置換
For r = 1 To UBound(aryRep)
.Execute _
FindText:=aryRep(r, 1), _
ReplaceWith:=aryRep(r, 2), _
Replace:=wdReplaceAll
Next r
End With
End Sub
ライブラリの参照とは
ライブラリの参照は、Word VBAから他のアプリのオブジェクトやプロパティ、メソッドの情報を利用できるようにします。
はじめの「Dim
wbXL
As
Excel.Workbook
」ではExcelブックオブジェクトの変数を宣言しています。ライブラリ参照なしでは、Wordは「Excel? ナニソレ?」とエラーになってしまいます。
また、「wbXL.
」と入力するとExcelブックオブジェクトと解釈されるので、これにかかるプロパティやメソッドが入力候補として表示され、効率的にコーディングを進められます。
Excel上でのコーディングとは異なる点もあります。ここはWord VBAの場なのでExcelのオブジェクトであることの明示が必要なことです。Excel VBAでは「Workbook
」で済むところを「Excel.Workbook
」とします。
Excelの起動後の表示/非表示
appXL.Workbook.Open
でExcelを起動してブックを開きますが、この時のExcelのウィンドウやブックは不可視の状態です。つまり、ユーザーがブックを閉じたりExcelを終了することはできないので、
appXL.Quit SaveChanges:=False
でマクロでExcelの終了までを行っています。
Excelマクロから上記と同じ処理を行うと…
CreateObjectとの違い
次のようなコードを使うと、ライブラリを参照しなくてもWordからExcelの操作が可能です。
Dim appXL As Object
Set appXL = CreateObject("Excel.Application")
ただしこの場合は、WordはExcelやExcelオブジェクトを「何か不明なオブジェクト」としてしか扱えないので、入力候補の表示などのサポートは使用できません。