Wordの壊れた相互参照を検出する

文書中に壊れた相互参照リンクがないかをチェックできるマクロです。

異常な相互参照ブックマークを検出して、該当箇所にコメントを挿入します。

多段落にまたがるブックマーク

一部のテキストが参照から漏れたブックマーク

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段落段以上になっていないか、範囲内の文字数と段落の文字数が不一致でないかをチェックしています。

残念ながら壊れたブックマークの修正はできませんが、編集画面上ではフィールド更新の結果を確認するほかチェックの方法がないので、事前チェックに有効活用できると思います!
タイトルとURLをコピーしました