【VBA】ワードファイルのフッター内で文字列を置換する

エクセルVBAで使うコードの備忘録。VBAでワードファイルを操作して、ドキュメントのヘッダー内で特定の文字列を置換するコード。

スポンサーリンク

事前準備

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

フッター内の指定文字列を置換する

ヘッダーの置換方法をお読みになった方にとっては、HeadersをFootersに変えるだけでほとんど同じです。

フッター内での置換を行うには、まずフッターの情報がどのように格納されているかを知らなければなりません。「Word.Document」オブジェクト「Sections」内の「Footers」がこれに該当します。ここで気を付けないといけないのは、ワードではセクションを区切ることによりそれぞれのセクションごとに別のフッターを付けることが可能になっている点です。これに対応して、Sectionsはオブジェクトの配列として与えられており、その下にあるFootersも配列となっています。そのため、すべてのセクションのすべてのフッター内をすべて置換の対象にするには、これらの配列をすべて検索する必要があります。

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

サンプルコード

Public Sub ReplaceInFooters()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    '--- ドキュメントオブジェクト ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
    
    '--- 置換前の文字列 ---'
    Dim strTarget As String
    strTarget = "[置換前の文字列]"
    
    '--- 置換後の文字列 ---'
    Dim strReplaced As String
    strReplaced = "[置換後の文字列]"
    
    '--- セクション・フッター数を格納する変数 ---'
    Dim i_n As Long
    Dim j_n As Long
    
    '--- 全てのセクション・フッターでループ ---'
    Dim objFind As Word.Find
    Dim i As Long
    Dim j As Long
    i_n = objDoc.Sections.Count
    For i = 1 To i_n
        j_n = objDoc.Sections(i).Footers.Count
        For j = 1 To j_n
            
            '--- 各セクション・ヘッダーで置換を実行 ---'
            Set objFind = objDoc.Sections(i).Footers(j).Range.Find
            
            objFind.ClearFormatting
            objFind.Text = strTarget
            objFind.Replacement.ClearFormatting
            objFind.Replacement.Text = strReplaced
            Call objFind.Execute(Replace:=Word.wdReplaceAll)
        Next j
    
    Next i
    
    '--- ドキュメントを閉じる ---'
    objDoc.Close
    
    '--- ワードを閉じる ---'
    objWord.Quit
    
End Sub