Существует ли уникальный идентификатор для перекрестных ссылок в Word? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть макрос, который выбирает все гиперссылки и перекрестные ссылки из документа. Я добавляю каждый из них в список, который отображается пользователю.

Когда существует несколько перекрестных ссылок с одним и тем же текстом, как я могу их различить?

Для гиперссылок я могу использовать hyperlink.Name, который будет возвращать уникальное имя.

Что я могу использовать для идентификации перекрестной ссылки? Есть ли поле, которое я могу использовать, например, Name для гиперссылки?

Я использую приведенный ниже код для поиска перекрестных ссылок:

For Each objFld In ActiveDocument.Fields
    If objFld.Type = wdFieldRef Then
       ' add objFld
    ..

РЕДАКТИРОВАТЬ: Я использую objFld.result.Start, чтобы получить позицию перекрестной ссылки, но это происходит для броска, когда пользователь обновляет любую предыдущую перекрестную ссылку.

РЕДАКТИРОВАТЬ2: Я наткнулся на этот ответ на SO, и он побудил меня добавить ниже в мой код:

objFld.ShowCodes = True
objFld.Select
Selection.Collapse wdCollapseStart
Selection.MoveStartUntil "_"
Selection.MoveEndUntil " "
refName = Selection.Text
objFld.ShowCodes = False

Так что теперь я могу прочитать поле с REF _Ref528247211 \h и получить _Ref528247211 в refName.

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

Как мне это сделать?

EDIT2:

У меня есть пользовательская форма, в которой я перечисляю гиперссылки и перекрестные ссылки. Пользователь должен иметь возможность дважды щелкнуть каждый элемент и обновить при необходимости. Для этого мне нужно различать каждое вхождение гиперссылки / перекрестной ссылки

На следующем рисунке показан мой список, заполненный из Раздела 1.11, на который ссылаются несколько раз на странице 39. Имена гиперссылок одинаковы

enter image description here

1 Ответ

0 голосов
/ 07 ноября 2018

Большое спасибо, Синди.

Исходя из вашего комментария о преобразовании перекрестных ссылок в закладки, я обновил свой код, как показано ниже:

sText = hl.Name + "_" + CStr(hl.range.Start)
ActiveDocument.Bookmarks.Add Name:=sText, range:=hl.range
lstCrossRef.List(lstCrossRef.ListCount - 1, 5) = sText

При выборе элемента из списка я использую приведенный ниже код для выбора перекрестной ссылки в документе.

bmName = lstCrossRef.List(lstCrossRef.ListIndex, 5)
ActiveDocument.Bookmarks(bmName).range.Select
...