Подсчет внутренних ссылок (Microsoft Word)
Word позволяет устанавливать в документе ссылки либо на внешний документ, либо на другие места в текущем документе. Питер ищет способ подсчитать только внутренние ссылки в документе и задается вопросом, есть ли способ сделать это.
Единственный способ сделать это — использовать макрос для пошагового перехода по каждой гиперссылке в документе. К счастью, это легко сделать, изучив элементы в коллекции гиперссылок. Каждый объект гиперссылки имеет множество свойств, которые можно установить в зависимости от характеристик ссылки. Особое значение имеют свойства Address и SubAddress.
Свойство Address (как следует из названия) является целевым адресом ссылки. Обычно это что-то вроде URL-адреса (как в /), но это также может быть имя файла на диске, доступном из вашей системы, или адрес электронной почты (как в mailto: [email protected]). Поскольку свойство Address может иметь несколько целей, вы не можете специально проверить наличие говорящих символов, таких как префикс «http». Если префикс отсутствует, то ссылка может быть внешней по отношению к текущему документу, поскольку она может ссылаться на другой файл в вашей системе.
Однако есть один случай, когда поле «Адрес» будет пустым — если ссылка ведет на закладку в текущем документе. Если он пуст, то для свойства SubAddress будет задано имя закладки, на которую есть ссылка в ссылке. Конечно, если ссылка ведет на конкретную закладку в другом документе, тогда будут установлены свойства Address и SubAddress.
Чтобы получить представление об информации, хранящейся в каждом объекте гиперссылки, взгляните на следующий короткий макрос. Он проходит по каждой ссылке и отображает информацию о каждой.
Sub LinkInfo() Dim h As Hyperlink Dim sTemp As String For Each h In ActiveDocument.Hyperlinks sTemp = h.TextToDisplay & vbCrLf sTemp = sTemp & h.Address & vbCrLf sTemp = sTemp & h.SubAddress MsgBox sTemp Next h End Sub
Итак, самый простой способ определить количество внутренних ссылок в документе (другими словами, ссылок на закладки в текущем документе) — это изучить свойство Address каждого объекта Hyperlink.
Если свойство пусто, то можно смело считать, что ссылка внутренняя.
Sub InternalLinks1() Dim h As Hyperlink Dim lInternal As Long lInternal = 0 If ActiveDocument.Hyperlinks.Count > 0 Then For Each h In ActiveDocument.Hyperlinks If h.Address = "" Then lInternal = lInternal + 1 Next hp End If MsgBox lInternal & " hyperlinks are internal" _ & " out of a total of " & ActiveDocument.Hyperlinks.Count End Sub
Если вы хотите составить список фактических целей для внутренних ссылок, было бы несложным дополнением к макросу просмотреть в цикле For Each каждое свойство SubAddress и добавить его к тому, что вы отображали в конце макрос.
Конечно, гиперссылки не ограничиваются отображением исключительно в теле документа. Вы также можете иметь гиперссылки в других элементах документа, таких как верхние и нижние колонтитулы, концевые сноски и текстовые поля. В следующем варианте макроса подсчитываются все ссылки, которые он находит в любой из этих областей (StoryRanges) в документе.
Sub InternalLinks2() Dim h As Hyperlink Dim lInternal As Long Dim lTotal As Long Dim aStory As Range lTotal = 0 lInternal = 0 For Each aStory In ActiveDocument.StoryRanges lTotal = lTotal + aStory.Hyperlinks.Count If aStory.Hyperlinks.Count > 0 Then For Each h In aStory.Hyperlinks If h.Address = "" Then lInternal = lInternal + 1 Next h End If Next aStory MsgBox lInternal & " hyperlinks are internal" _ & " out of a total of " & lTotal End Sub
_Примечание: _
Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
WordTips — ваш источник экономичного обучения работе с Microsoft Word.
(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12814) относится к Microsoft Word 2007, 2010 и 2013.