我有一个宏,可从文档中获取所有超链接和交叉引用。我将每个添加到显示给用户的列表框中。
当多个交叉引用具有相同的文本时,如何区分它们?
对于超链接,我可以使用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节中多次填充的我的列表框。超链接名称都是相同的
答案 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