特定のブックマークへの相互参照の検索(Microsoft Word)
ジェームズは、相互参照のためにドキュメント内のアイテムをブックマークしています。編集の過程で、以前にブックマークしたものを削除する必要がある場合があります。ジェームズは、削除しようとしているテキスト(およびブックマーク)への相互参照があるかどうかを確認する方法があるかどうか疑問に思います。
このタスクをたまに実行する必要がある場合は、手動で実行できます。ただし、どのようにアプローチするかは、相互参照をどのように作成したかによって異なります。相互参照を挿入すると、Wordに[相互参照]ダイアログボックスが表示されます。 (図1を参照)
図1.相互参照ダイアログボックス。
ダイアログボックスで、[参照タイプ]ドロップダウンリストを使用して、作成する相互参照のタイプを選択できます。各タイプの参照は、REFフィールドのさまざまなバリエーションを利用して、実際の相互参照を挿入します。たとえば、ブックマークへの相互参照を挿入すると、挿入されるフィールドは次のようになります。
{ REF MyBookmark \h }
「MyBookmark」の部分は、相互参照しているブックマーク名です。
パラメータ(この場合は\ h)は、[相互参照]ダイアログボックスの[参照先の挿入]ドロップダウンリストによって制御されます。代わりに、ドキュメントの見出しへの相互参照を挿入すると、次のようになります。
{ REF _Ref47603047 \h }
このフィールドコードの「_Ref47603047」の部分は、システムで生成されたブックマークであり、非表示になっています。相互参照用に選択した見出しを指します。 [ブックマーク]ダイアログボックスを表示し、ダイアログボックスの下部にある[非表示のブックマーク]チェックボックスをクリックすると、これらの非表示のブックマークを確認できます。
このヒントでは、Jamesがブックマークされたテキストへの相互参照を見つけるように特に要求したので、相互参照を作成したときに、[参照の挿入先]ドロップダウンリストで[ブックマーク]を選択して作成したと想定します。 -参照ダイアログボックス。これにより、ブックマークがどこかで相互参照されているかどうかを見つけるのも少し簡単になります。
削除を検討しているテキストにあるブックマークの名前を把握することから始めます。この例では、MyBookmarkなどの名前であると想定します。 Alt + F9を押すだけで、Wordはフィールドコードの結果ではなく、ドキュメント内のフィールドコードを表示します。この時点で、ブックマーク名(この場合はMyBookmark)を検索するだけで、任意のREFフィールドを見つけることができます(REFフィールドは相互参照に使用されることに注意してください)
ブックマーク名が含まれています。ブックマーク名が見つからない場合、そのブックマークへの相互参照はなく、テキストとそれに含まれるブックマークを安全に削除できます。すべて完了したら、Alt + F9をもう一度押して、フィールドコードの表示をオフにします。
ブックマークがたまに複数回参照されているかどうかを確認する必要がある場合、または検索と置換が提供するものよりも完全な検索を実行する場合は、マクロの使用を検討する必要があります。この状況では、次の4つのマクロのセットが役立ちます。
Sub IsBookmarkReferenced() Dim aStory As Range Dim aShape As Shape Dim aField As Field Dim bkName As String Dim bReffed As Boolean bReffed = False If Selection.Bookmarks.Count > 0 Then bkName = Selection.Bookmarks(1).Name For Each aStory In ActiveDocument.StoryRanges If TestForBookmark(aStory, bkName) Then bReffed = True Else Select Case aStory.StoryType Case wdMainTextStory, wdEvenPagesHeaderStory, _ wdPrimaryHeaderStory, wdEvenPagesFooterStory, _ wdPrimaryFooterStory, wdFirstPageHeaderStory, _ wdFirstPageFooterStory For Each aShape In aStory.ShapeRange If aShape.TextFrame.HasText Then If TestForBookmark(aShape.TextFrame.TextRange, bkName) Then bReffed = True End If Next End Select Next aStory Endif Next aStory sTemp = "Bookmark " & bkName & " is " If Not bReffed Then sTemp = sTemp & "NOT " sTemp = sTemp & "referenced in the document." Else sTemp = "There is no bookmark in the selected text." End If MsgBox sTemp End Sub
Function TestForBookmark(tRange As Range, bkName As String) As Boolean Dim aField As Field TestForBookmark = True For Each aField In tRange.Fields Select Case aField.Type Case wdFieldRef, wdFieldAsk, wdFieldBarCode, _ wdFieldGoToButton, wdFieldHyperlink, _ wdFieldNoteRef, wdFieldPageRef, wdFieldSet If BookRef(aField.Code.Text, aField.Type) = bkName Then Exit Function Case wdFieldTOC, wdFieldTOA If TOCRef(aField.Code.Text) = bkName Then Exit Function End Select Next aField TestForBookmark = False End Function
Function BookRef(str As String, typeCode As Long) As String Dim s As String Dim i As Long s = Trim(str) If s <> "" Then i = InStr(s, " ") If i > 0 Then s = Trim(Mid(s, i)) If typeCode = wdFieldHyperlink Then If InStr(s, "\l") > 0 Then s = Mid(s, InStr(s, """") + 1) i = InStr(s, """") If i > 1 Then s = Left(s, i - 1) Else s = "" End If Else i = InStr(s, " ") If i > 0 Then s = Trim(Left(s, i)) End If End If BookRef = s End Function
Function TOCRef(str As String) As String Dim s As String Dim i As Long s = Trim(str) i = InStr(s, "\b") If i = 0 Then TOCRef = "" Exit Function End If s = Trim(Mid(s, i + 2)) i = InStr(s, " ") If i > 0 Then s = Left(s, i - 1) TOCRef = s End Function
マクロを使用するには、削除を検討しているテキストを選択してから、IsBookmarkReferencedマクロを実行するだけです。
次に、他の3つの関数を利用して、選択したテキスト内のブックマークが他の場所で参照されているかどうかを判断します。マクロは、メインドキュメント自体だけでなく、ヘッダー、フッター、およびテキストボックスのフィールドもチェックします。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(7619)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice365のWordに適用されます。