文書中に壊れた相互参照リンクがないかをチェックできるマクロです。
異常な相互参照ブックマークを検出して、該当箇所にコメントを挿入します。
多段落にまたがるブックマーク
一部のテキストが参照から漏れたブックマーク
Sub XRefChecker()
Dim oDoc As Document
Dim oBMS As Bookmarks, aBM As Bookmark
Set oDoc = ActiveDocument
Set oBMS = oDoc.Bookmarks
With oBMS
.DefaultSorting = wdSortByName
'隠しブックマークを操作可能に
.ShowHidden = True
End With
For Each aBM In oBMS
'ブックマーク範囲の段落数チェック
If aBM.Range.Paragraphs.Count > 1 Then
oDoc.Comments.Add _
Range:=aBM.Range.Paragraphs(1).Range, _
Text:="[相互参照ブックマーク 多段落化(ココカラ)] ID:" & aBM.Name
oDoc.Comments.Add _
Range:=aBM.Range.Paragraphs.Last.Range, _
Text:=" [相互参照ブックマーク 多段落化(ココマデ)] ID:" & aBM.Name
'ブックマーク範囲と段落範囲との文字数チェック
ElseIf aBM.Range.Characters.Count < aBM.Range.Paragraphs(1).Range.Characters.Count - 1 Then
oDoc.Comments.Add _
Range:=aBM.Range, _
Text:="[相互参照ブックマーク 範囲不足] ID: " & aBM.Name
End If
Next aBM
'隠しブックマーク表示を戻す
oBMS.ShowHidden = False
Set aBM = Nothing
Set oBMS = Nothing
Set oDoc = Nothing
End Sub
BookMarksObject.ShowHidden = True
隠しブックマークは、このプロパティ変更をしてからでないとVBAでも扱えないという特殊なオブジェクトです。編集画面に表示することもできませんし、なぜか必要以上に厳重に隠されているようです。
BookMarkObject.Range
ブックマークが設定された範囲(Range
)を取得できます。この処理では隠しブックマークに対象を絞っていません。この範囲が、2段落段以上になっていないか、範囲内の文字数と段落の文字数が不一致でないかをチェックしています。
残念ながら壊れたブックマークの修正はできませんが、編集画面上ではフィールド更新の結果を確認するほかチェックの方法がないので、事前チェックに有効活用できると思います!