Selection.Find 整个文档与它应该找到的文本不匹配

Selection.Find through the document doesn't match the text it's supposed to 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