vba - Selection.Find 通过文档与它应该找到的文本不匹配
问题描述
我正在尝试遍历段落编号,将它们与文本中的引用匹配并自动创建交叉引用。我遇到的问题是,在我找到文本后,Selection.Text 似乎与我一半时间传递给它的内容不匹配(RefNum)。我怀疑问题出在我的 Do While Selection.Find.Execute = True 行中,但作为 VBA 的新手,我似乎无法理解它。谁能帮我看看?
Sub cross_reference_generator()
Dim RefList As Variant
Dim Ref As String
Dim i As Integer
With ActiveDocument
Selection.HomeKey Unit:=wdStory
RefList = .GetCrossReferenceItems(wdRefTypeNumberedItem)
For i = UBound(RefList) To 1 Step -1
Selection.HomeKey Unit:=wdStory
Ref = Trim(RefList(i))
RefNum = Split(Ref, " ")(0)
With Selection.Find
Do While Selection.Find.Execute = True
.Forward = True
.Wrap = wdFindStop
.Text = RefNum
.Execute
Selection.InsertCrossReference ReferenceType:="Numbered item", _
ReferenceKind:=wdNumberFullContext, _
ReferenceItem:=CStr(i), _
InsertAsHyperlink:=True, _
IncludePosition:=False, _
SeparateNumbers:=False, _
SeparatorString:=" "
Loop
End With
Next i
End With
End Sub
谢谢!
解决方案
我没有要测试的东西,但是您的某些行似乎有问题。例如,您的第一次调用Execute
发生在您设置.Text
属性之前...
Sub cross_reference_generator()
Dim RefList As Variant
Dim Ref As String
Dim i As Integer
With ActiveDocument
Selection.HomeKey Unit:=wdStory
RefList = .GetCrossReferenceItems(wdRefTypeNumberedItem)
For i = UBound(RefList) To 1 Step -1
Selection.HomeKey Unit:=wdStory
Ref = Trim(RefList(i))
RefNum = Split(Ref, " ")(0)
With Selection.Find
.Forward = True
.Wrap = wdFindStop
.Text = RefNum 'set Text before calling execute
Do While .Execute
Selection.InsertCrossReference ReferenceType:="Numbered item", _
ReferenceKind:=wdNumberFullContext, _
ReferenceItem:=CStr(i), _
InsertAsHyperlink:=True, _
IncludePosition:=False, _
SeparateNumbers:=False, _
SeparatorString:=" "
Loop
End With
Next i
End With
End Sub