Джеймс закладывает элементы в своих документах для перекрестных ссылок. Иногда в процессе редактирования ему может потребоваться удалить то, что он ранее добавил в закладки. Джеймс задается вопросом, есть ли способ узнать, есть ли какие-либо перекрестные ссылки на текст (и закладки), которые он собирается удалить.

Если вам нужно выполнять эту задачу только время от времени, вы можете сделать это вручную. Однако то, как вы подойдете к этому, будет зависеть от того, как вы создали перекрестную ссылку. Видите ли, когда вы вставляете перекрестную ссылку, Word отображает диалоговое окно перекрестной ссылки. (См. Рис. 1.)

image

Рисунок 1. Диалоговое окно перекрестных ссылок.

В диалоговом окне, используя раскрывающийся список Тип ссылки, вы можете выбрать тип перекрестной ссылки, которую хотите создать. Каждый тип ссылки использует разные варианты поля REF для вставки фактической перекрестной ссылки. Например, если вы вставляете перекрестную ссылку на закладку, то вставляемое поле будет выглядеть так:

{ REF MyBookmark \h }

Часть «Моя закладка» — это имя закладки, на которую вы делаете перекрестную ссылку.

Параметр (в данном случае \ h) управляется раскрывающимся списком «Вставить ссылку на» в диалоговом окне «Перекрестная ссылка». Если вместо этого вы вставите перекрестную ссылку на заголовок в документе, он будет выглядеть примерно так:

{ REF _Ref47603047 \h }

Часть этого кода поля «_Ref47603047» является скрытой закладкой, созданной системой. Он относится к заголовку, который вы выбрали для перекрестной ссылки. Эти скрытые закладки можно увидеть, если отобразить диалоговое окно «Закладка» и установить флажок «Скрытые закладки» в нижней части диалогового окна.

В этом совете, поскольку Джеймс специально попросил найти перекрестные ссылки на текст, отмеченный закладками, я предполагаю, что, когда он создавал перекрестную ссылку, он сделал это, выбрав закладку в раскрывающемся списке «Вставить ссылку в». диалоговое окно ссылки. Это на самом деле немного упрощает поиск, есть ли где-либо перекрестная ссылка на вашу закладку.

Начните с определения имени закладки в тексте, который вы собираетесь удалить. В данном случае я предполагаю, что это имя, например MyBookmark. Все, что вам нужно сделать, это нажать Alt + F9, в результате чего Word отобразит коды полей в вашем документе, а не результаты кодов полей. На этом этапе вы можете просто выполнить поиск по имени закладки (в данном случае MyBookmark), и вы сможете найти любое поле REF (помните, поля REF используются для перекрестных ссылок)

который содержит имя закладки. Если вы не нашли имя закладки, значит, на эту закладку нет перекрестной ссылки, и вы можете безопасно удалить текст и содержащуюся в нем закладку. Когда все будет готово, нажмите Alt + F9 еще раз, чтобы отключить отображение кодов полей.

Если вам нужно выяснить, ссылаются ли на закладку более одного раза, или если вы хотите выполнить более полный поиск, чем предлагает функция «Найти и заменить», то вам следует рассмотреть возможность использования макроса. В этой ситуации может пригодиться следующий набор из четырех макросов.

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.

Он, в свою очередь, использует три другие функции, чтобы выяснить, есть ли ссылка на какую-либо закладку в выделенном тексте в другом месте. Макрос проверяет поля не только в самом основном документе, но также в верхних, нижних колонтитулах и текстовых полях.

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (7619) применим к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365.