【发布时间】:2018-11-05 06:18:57
【问题描述】:
我有一个宏,可以从文档中获取所有超链接和交叉引用。我将每一个都添加到显示给用户的列表框中。
同一文本有多个交叉引用时,如何区分?
对于超链接,我可以使用hyperlink.Name,它将返回一个唯一的名称。
我可以使用什么来识别交叉引用?是否有我可以使用的字段,例如 Name 用于超链接?
我使用下面的代码来查找交叉引用:
For Each objFld In ActiveDocument.Fields
If objFld.Type = wdFieldRef Then
' add objFld
..
编辑:
我正在使用objFld.result.Start 来获取交叉引用的位置,但是当用户更新任何先前的交叉引用时,它会被折腾。
EDIT2: 我在 SO 上遇到了this answer,它提示我将以下内容添加到我的代码中:
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 页中多次引用。超链接名称都相同
【问题讨论】:
-
文档中的位置或它们出现的顺序是唯一的,真的。由于我们对该文件一无所知,因此无法提供更具体的内容。如果文档不断被编辑,因此您无法使用任何类型的位置信息,那么您可能需要为交叉引用添加书签...
-
啊。根据创建交叉引用的方式,它引用的书签名称可能是唯一的(Word 生成的
_REF后跟一个长数字。 -
@CindyMeister,我在问题中添加了一些细节。书签会帮助我区分对同一目标的不同交叉引用吗?
-
如果您能更详细地解释超链接和交叉引用数组的用途,可能会有所帮助。您可能正在复制 Word 已经免费提供的内容。您最好用 scripting.dictionaries 的 scripting.dictionary 替换您的数组。第一个字典中的键将是链接到第二个子字典的引用源的名称,第二个子字典将使用您为每个交叉引用创建的书签的名称(例如 Ref_XZY_bm1、REF_XZY_bm2)链接到书签。
-
@Freeflow 我在问题中添加了更多细节