0

我正在尝试编写一些代码来搜索所有故事,包括页眉、页脚、脚注等,然后在每次出现时停止,以便用户可以做出决定(它可能会或可能不会改变),然后再次单击按钮移动到下一个匹配项(如 Word 的 Find Next)。

我知道有一些非常棘手的代码用于使用范围对象执行搜索和替换,我让该代码适用于该项目的另一部分,但我不能做的是让它搜索并停在选定的文本处,然后继续查看不同的故事,它只是停在主文档的末尾。

下面的代码看起来应该可以工作,但即使脚注有要搜索的文本,它也会忽略它。我已经对该站点和其他站点进行了彻底的搜索,并找到了几个搜索和替换的示例,但没有找到搜索和停止/选择的示例。

感激地收到任何建议-谢谢。

Sub TestSelection()

    Dim rngStory As Range
    Dim docDocument As Document

    Set docDocument = ActiveDocument

    With docDocument
        For Each rngStory In .StoryRanges
           Select Case rngStory.StoryType
                Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
                    Debug.Print rngStory.StoryType

                    With Selection.Find
                    .ClearFormatting
                        .Text = "XYZ"
                        .Replacement.Text = ""
                        .Forward = True
                        .Wrap = wdFindStop
                        .Format = True
                        .MatchCase = False
                        .MatchWholeWord = False
                        .MatchWildcards = False
                        .MatchSoundsLike = False
                        .MatchAllWordForms = False
                    End With
                    Selection.Find.Execute

                        If Selection.Find.Found = True Then
                            Exit Sub
                        End If

                    End Select

        Next rngStory
    End With
End Sub
4

1 回答 1

0

在这种情况下这是否是您的问题我不知道,但是当您的循环遍历返回的所有范围时StoryRanges,它不会处理整个文档。它只包括每个故事的第一部分。(因此,例如,如果您的文档中有多个部分,它将只包括第一部分的页眉和页脚)。

您需要使用该NextStoryRange方法才能访问整个故事。在 VBA 帮助中查找示例循环构造。(这是一个可怕的 API - 和 一样糟糕Range.Find!)。

另外,请注意执行搜索会更改选择,因此 Selection.Find 会突然搜索最后一个结果,而不是整个范围。

于 2013-05-22T11:42:33.127 回答