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」に変えたブックマークを新規設置して、隠しブックマークを削除しています。
なお、_(アンダースコア)で始まる名前は自動設置のブックマークで使用されますが、ユーザーが設置するブックマークには使えません。つまり、ユーザーが設置したブックマークを書き換える心配はありません。