【问题标题】:Using Cross Reference Field Code to move selection to Target of Field Code使用交叉引用域代码将选择移动到域代码的目标
【发布时间】:2015-02-03 23:01:22
【问题描述】:

OP 更新:

感谢 KazJaw 提供的代码,它促使我改变了解决问题的方法。这是我当前的代码:

Sub Method3()
Dim intFieldCount As Integer
Dim i As Integer
Dim vSt1 As String

intFieldCount = ActiveDocument.Fields.Count

For i = 1 To intFieldCount
    ActiveDocument.Fields(i).Select 'selects the first field in the doc
    Selection.Expand
    vSt1 = Selection.Fields(1).Code
    'MsgBox vSt1
    vSt1 = Split(vSt1, " ")(2) 'Find out what the (2) does
    MsgBox vSt1
    ActiveDocument.Bookmarks(vSt1).Select  'Selects the current crossreference in the ref list
Next i
End Sub

好的,所以代码当前在文档中找到第一个字段,读取其字段代码,然后跳转到文档中的位置以模拟 CTRL+单击。

但是,它适用于所有类型的字段书签、尾注、数字、表格等。我只想找到参考字段。我以为我可以从域代码中推断出这一点,但事实证明数字和书签使用相同的域代码布局,即。

  1. 参考/书签有一个域代码 {REF_REF4123123214\h}
  2. 图交叉引用具有域代码 {REF_REF407133655\h}

有没有一种有效的方法让 VBA 区分这两者?我在想,因为文档中的参考字段写成(参考 1)我可以找到该字段,然后对左侧的单词进行字符串比较,看看它是否显示“参考”。

我正在考虑使用 MoveLeft 方法来做到这一点

Selection.MoveLeft

但我不知道如何从当前选择中向左移动 1 个单词并选择该单词而不是执行 strcomp

或者我可以检查字段类型?与...

If Selection.Type = wdFieldRef Then
   Do Something
End If

但我不确定我应该寻找哪种“类型”。

感谢任何建议

【问题讨论】:

  • 您能否将您的问题归结为您遇到问题的特定代码行?
  • 尝试使用这个逻辑:ActiveDocument.Fields(1).select >> selection.MoveLeft >> selection.TypeText "001 "
  • 感谢 KazJaw。您提供的代码解决了一半的问题。这会在字段之前插入文本“001”,而不是字段 CTRL+单击的目标。我稍微修改了它来做我需要的事情。我将使用新代码和我遇到的新问题更新原始帖子。
  • RubberDuck,感谢您的回复。我用更具体的问题更新了 OP。问候

标签: vba ms-word cross-reference


【解决方案1】:

所有 REF 字段“引用”书签。 Word 在获得 REF 字段引用的所有对象上设置书签:数字、标题等。无法从字段的内容中区分另一端的内容。您需要“检查”该目标,而无需实际选择它即可。例如,您可以检查前六个字母是否为“Figure”。

您的代码效率低下 - 无需使用 Selection 对象来获取字段代码。以下更有效:

Sub Method3()
  Dim fld As Word.Field
  Dim rng as Word.Range
  Dim vSt1 As String

  ForEach fld in ActiveDocument.Fields
    vSt1 = fld.Code
    'MsgBox vSt1
    vSt1 = Split(vSt1, " ")(2) 'Find out what the (2) does
    MsgBox vSt1
    Set rng = ActiveDocument.Bookmarks(vSt1).Range
    If Left(rng.Text, 6) <> "Figure" Then
        rng.Select
    End If
  Next 
End Sub

【讨论】:

  • 您好 Cindy,感谢您提供的替代方法。我前段时间放弃了这个项目,但很快就会重新开始。我一定会尝试您提供的代码!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2017-01-22
相关资源
最近更新 更多