【问题标题】:Macro stopped searching for the same word after vbNo宏在 vbNo 之后停止搜索相同的单词
【发布时间】:2020-07-16 06:18:10
【问题描述】:

晚安 VBA 大师

我可以就我的代码向您寻求帮助吗?

如下所示,我的代码仅用于搜索特定标题样式的单词,然后将其转换为小写。

我的问题是,一旦我在消息框中选择“否”,我的宏就会停止在下一个标题中搜索相同的单词。

我的文档确实有多个标题,我需要搜索同一个词,直到文档的最后一个标题。

我遵循 SOP,因此无法将所有单词都转换为小写。

希望您能帮我解决我的问题。提前谢谢你。

Sub ChangeCase1()
    Dim StrFind As String, StrRepl As String
    Dim i As Long
    StrFind = "And,Aboard,About,Above,Across,After,Against,Along,Alongside,Amid,Amidst,Among,Around,As,Aside,At,Athwart,Atop,Barring,Before,BehindBelow,Off,On,Onto,Opposite,Out,Outside,Beneath,Beside,Besides,Between,Beyond,But,By,Circa,Concerning,Despite,Down,During,Except,Following,For,From,In,Inside,Into,Like,Mid,Minus,Near,Next,Notwithstanding,Of,Worth,Over,Pace,Past,Per,Plus,Regarding,Round,Since,Than,Through,Throughout,Till,Times,To,Toward,Towards,Under,Underneath,Unlike,Until,Up,Upon,Versus,Via,With,Within,Without"
    Set RngTxt = Selection.Range
    For i = 0 To UBound(Split(StrFind, ","))
        With Selection.Find
            .ClearFormatting
            .Wrap = wdFindContinue
            .Forward = True
            .Format = True
            .MatchCase = True
            .Text = Split(StrFind, ",")(i)
            .Style = ActiveDocument.Styles("K-Heading Level 1")
            .Execute
            While .Found
                If MsgBox("Replace " & Split(StrFind, ",")(i), vbYesNo) = vbYes Then
                    Selection.Range.Case = wdLowerCase
                    Selection.Collapse Direction:=wdCollapseEnd
                    .Execute
                Else
                    GoTo Continue
                End If
            Wend

        End With
Continue:
    Next i
    Call ChangeCase2
End Sub

【问题讨论】:

    标签: vba replace ms-word lowercase


    【解决方案1】:

    美好的一天,欢迎登机。

    以下是一些需要修改的地方:

    1. 在您的代码找到某些内容后,它会选择它。所以,当你问 要再次搜索,它会在最后一个搜索结果的选择范围内进行搜索。您已经有了在 vbYes 案例中执行此操作的 Selection.Collapse 语句。在vbNo的情况下也只需应用即可。
    2. 为确保代码将搜索一个单词直到文档末尾并且不会重新开始,您应该将 .Wrap = wdFindContinue 更改为 .Wrap = wdFindStop
    3. 为确保代码将搜索从文档开头到结尾的每个单词,您应该将With Selection.Find 更改为With ActiveDocument.Content.Find

    所以,你的代码应该是:

    Sub ChangeCase1()
        Dim StrFind As String, StrRepl As String
        Dim i As Long
        StrFind = "And,Aboard,About,Above,Across,After,Against,Along,Alongside,Amid,Amidst,Among,Around,As,Aside,At,Athwart,Atop,Barring,Before,BehindBelow,Off,On,Onto,Opposite,Out,Outside,Beneath,Beside,Besides,Between,Beyond,But,By,Circa,Concerning,Despite,Down,During,Except,Following,For,From,In,Inside,Into,Like,Mid,Minus,Near,Next,Notwithstanding,Of,Worth,Over,Pace,Past,Per,Plus,Regarding,Round,Since,Than,Through,Throughout,Till,Times,To,Toward,Towards,Under,Underneath,Unlike,Until,Up,Upon,Versus,Via,With,Within,Without"    
        Set RngTxt = Selection.Range
        For i = 0 To UBound(Split(StrFind, ","))
            With ActiveDocument.Content.Find
                .ClearFormatting
                .Wrap = wdFindStop
                .Forward = True
                .Format = True
                .MatchCase = True
                .Text = Split(StrFind, ",")(i)
                .Style = ActiveDocument.Styles("K-Heading Level 1")
                .Execute
                While .Found
                    If MsgBox("Replace " & Split(StrFind, ",")(i), vbYesNo) = vbYes Then
                        Selection.Range.Case = wdLowerCase
                    End If
                    Selection.Collapse Direction:=wdCollapseEnd
                    .Execute
                Wend
            End With
        Next i
        'Call ChangeCase2
    End Sub
    

    【讨论】:

    • 非常感谢。但是,在消息框中选择“否”后,它仍然不会继续搜索下一个标题的相同单词(在我选择否后,宏停止搜索下一个标题的“和”)。是因为 GoTo Continue 吗?
    • 是的,你是对的。我修改了“继续”的位置,使其查找下一个相同单词的出现,而不是下一个。删除它和 GoTo 语句也可以解决问题。
    • 我试图删除,现在它不会停止搜索同一个词,直到我选择“是”
    • 那么您应该将.Wrap = wdFindContinue 更改为.Wrap = wdFindStop 以使代码在到达文档末尾时停止搜索相同的单词。此外,在第一个 .Excute 之前添加 Selection.HomeKey wdStory 以使代码从文档顶部开始搜索。检查新的修改。
    • 非常感谢先生,上面的代码现在可以正常工作并且已经解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多