Поиск перекрестных ссылок на определенные закладки (Microsoft Word)
Джеймс закладывает элементы в своих документах для перекрестных ссылок. Иногда в процессе редактирования ему может потребоваться удалить то, что он ранее добавил в закладки. Джеймс задается вопросом, есть ли способ узнать, есть ли какие-либо перекрестные ссылки на текст (и закладки), которые он собирается удалить.
Если вам нужно выполнять эту задачу только время от времени, вы можете сделать это вручную. Однако то, как вы подойдете к этому, будет зависеть от того, как вы создали перекрестную ссылку. Видите ли, когда вы вставляете перекрестную ссылку, Word отображает диалоговое окно перекрестной ссылки. (См. Рис. 1.)
Рисунок 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.