【问题标题】:Is there a unique identifier for Cross References in Word?Word 中的交叉引用是否有唯一标识符?
【发布时间】: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 我在问题中添加了更多细节

标签: vba ms-word


【解决方案1】:

非常感谢辛迪。

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

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

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 2021-03-03
    • 2012-04-17
    • 2021-08-26
    • 2011-03-16
    • 2010-11-01
    • 2013-07-17
    • 2021-12-18
    • 2016-03-29
    相关资源
    最近更新 更多