Word中的交叉引用是否有唯一的标识符?

时间:2018-11-05 06:18:58

标签: vba ms-word word-vba

我有一个宏,可从文档中获取所有超链接和交叉引用。我将每个添加到显示给用户的列表框中。

当多个交叉引用具有相同的文本时,如何区分它们?

对于超链接,我可以使用hyperlink.Name,它将返回一个唯一的名称。

我可以使用什么来识别交叉引用?我可以使用一个字段,例如Name作为超链接吗?

我使用以下代码查找交叉引用:

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

编辑: 我正在使用objFld.result.Start来获取交叉引用的位置,但是当用户更新任何先前的交叉引用时,都会费劲。

EDIT2: 我在this answer上遇到了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:

我有一个自定义表单,其中列出了超链接和交叉引用。用户应该能够双击每个项目并根据需要进行更新。为此,我需要区分每次出现的超链接/交叉引用

下图显示了在第39页的1.11节中多次填充的我的列表框。超链接名称都是相同的

enter image description here

1 个答案:

答案 0 :(得分:0)

非常感谢Cindy。

根据您有关将交叉引用转换为书签的评论,我更新了代码,如下所示:

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