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.