جیمز به خاطر ارجاع متقابل مواردی را در اسناد خود نشانه گذاری می کند. گاهی اوقات، در فرآیند ویرایش، ممکن است لازم باشد چیزی را که قبلا نشانه گذاری کرده است حذف کند. جیمز متعجب است که آیا راهی برای یافتن وجود ارجاعات متقابل به متن (و نشانک) وجود دارد که او قصد حذف آن را دارد یا خیر.
اگر لازم است این کار را هر چند وقت یکبار انجام دهید، می توانید آن را به صورت دستی انجام دهید. با این حال، نحوه برخورد شما به آن بستگی به نحوه ایجاد مرجع متقابل دارد. می بینید، زمانی که یک مرجع متقابل را وارد می کنید، Word کادر محاوره ای Cross-reference را نمایش می دهد. (شکل 1 را ببینید.)
شکل 1. کادر محاوره ای ارجاع متقابل.
در کادر محاوره ای، با استفاده از لیست کشویی Reference Type، می توانید نوع مرجع متقابلی را که می خواهید ایجاد کنید انتخاب کنید. هر نوع مرجع از تنوع متفاوتی از فیلد REF برای درج ارجاع متقابل واقعی استفاده می کند. به عنوان مثال، اگر شما یک ارجاع متقابل را به یک نشانک وارد کنید، فیلدی که درج می شود به صورت زیر است:
{ REF MyBookmark h }
بخش "MyBookmark" نام نشانکی است که شما به آن ارجاع می دهید. پارامتر (در این مورد h) توسط لیست کشویی Insert Reference To در کادر گفتگوی Cross-reference کنترل می شود. اگر به جای آن یک ارجاع متقابل به عنوانی در سند وارد کنید، شبیه به این خواهد شد:
{ REF _Ref47603047 h }
بخش "_Ref47603047" این کد فیلد یک نشانک تولید شده توسط سیستم است که پنهان است. به عنوانی که برای ارجاع متقابل خود انتخاب کرده اید اشاره دارد. اگر کادر محاوره ای نشانک را نمایش دهید و بر روی کادر تیک Hidden Bookmarks در پایین کادر محاوره ای کلیک کنید، می توانید این نشانک های پنهان را ببینید.
در این نکته، از آنجایی که جیمز به طور خاص خواسته است تا ارجاعات متقابل را به متن نشانکشده بیابد، فرض میکنم زمانی که او مرجع متقابل را ایجاد کرد، این کار را با انتخاب Bookmark در فهرست کشویی Insert Reference To انجام داد. کادر محاوره ای مرجع این در واقع یافتن اینکه آیا نشانک شما در جایی ارجاع داده شده است کمی آسان تر می کند.
با مشخص کردن نام نشانک موجود در متنی که قصد حذف آن را دارید شروع کنید. در این مثال، من میخواهم فرض کنم که نامی مانند MyBookmark است. تنها کاری که باید انجام دهید این است که Alt+F9 را فشار دهید ، که باعث می شود Word کدهای فیلد را به جای نتایج کدهای فیلد نمایش دهد. در این مرحله میتوانید به سادگی نام نشانک را جستجو کنید (در این مورد MyBookmark) و میتوانید هر فیلد REF را پیدا کنید (به یاد داشته باشید، فیلدهای REF برای ارجاع متقابل استفاده میشوند) که حاوی نام نشانک است. اگر نام نشانک را پیدا نکردید، هیچ ارجاع متقابلی به آن نشانک وجود ندارد و می توانید با خیال راحت متن و نشانک موجود در آن را حذف کنید. پس از اتمام کار، دوباره Alt+F9 را فشار دهید تا نمایش کدهای فیلد خاموش شود.
اگر میخواهید بدانید که آیا هر چند وقت یکبار به یک نشانک ارجاع داده میشود یا خیر، یا اگر میخواهید جستجوی کاملتری نسبت به آنچه Find and Replace ارائه میدهد انجام دهید، باید از یک ماکرو استفاده کنید. مجموعه چهار ماکرو زیر می تواند در این شرایط مفید باشد.
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, "") 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 را اجرا کنید. به نوبه خود، از سه عملکرد دیگر استفاده می کند تا بفهمد آیا نشانه ای در متن انتخاب شده در جای دیگری ارجاع داده شده است یا خیر. ماکرو فیلدها را نه تنها در خود سند اصلی، بلکه در سرصفحه ها، پاورقی ها و جعبه های متن بررسی می کند.