【发布时间】: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+单击。
但是,它适用于所有类型的字段书签、尾注、数字、表格等。我只想找到参考字段。我以为我可以从域代码中推断出这一点,但事实证明数字和书签使用相同的域代码布局,即。
- 参考/书签有一个域代码 {REF_REF4123123214\h}
- 图交叉引用具有域代码 {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