相互参照のブックマークを可視化する

Word の相互参照がおかしくなる根本の原因は、相互参照の挿入時に自動で設置されるブックマークが文書上で見えないことです。これを見えるようにすれば、編集時にブックマークの範囲がおかしくなってもすぐに気づくことができます。

相互参照ブックマーク

見えるブックマークに置き換えるマクロ

相互参照によって自動設置された隠しブックマークを、通常のブックマークに置き換えます。また、REFフィールドとPAGEREFフィールドの参照先を上記に合わせて書き換えます。

Sub 隠しブックマークをコンバート()

    Dim oDoc As Document
    Dim oBM As Bookmark
    Dim oFld As Field
    
    Set oDoc = ActiveDocument
    oDoc.Bookmarks.ShowHidden = True
    
    '自動設置ブックマーク「_Ref...」を標準ブックマーク「Ref...」に置換
    For Each oBM In oDoc.Bookmarks
        If Left(oBM.Name, 4) = "_Ref" Then
            oDoc.Bookmarks.Add Range:=oBM.Range, Name:=Right(oBM.Name, Len(oBM.Name) - 1)
            oBM.Delete
        End If
    Next
    
    ' REF/PAGEREFフィールドの参照先変更
    For Each oFld In oDoc.Fields
        Select Case oFld.Type
            Case wdFieldRef, wdFieldPageRef
            oFld.Code.Text = Replace(oFld.Code.Text, " _Ref", " Ref")
        End Select
    Next oFld
    oDoc.Bookmarks.ShowHidden = False
    
    'オプション詳細設定の「ブックマークを表示する]をオン
    oDoc.ActiveWindow.View.ShowBookmarks = True

End Sub
隠しブックマークをマクロで扱うには

ShowHiddenプロパティを True に指定する必要があります。指定がない場合、隠しブックマークはBookmarksコレクションに含まれません。

ブックマーク名は変更できない

ブックマークのNameプロパティは読み取り専用で書き換えできません。このため、隠しブックマークと同じ個所に「_Ref」を「Ref」に変えたブックマークを新規設置して、隠しブックマークを削除しています。

なお、_(アンダースコア)で始まる名前は自動設置のブックマークで使用されますが、ユーザーが設置するブックマークには使えません。つまり、ユーザーが設置したブックマークを書き換える心配はありません。

タイトルとURLをコピーしました