【问题标题】:word vba loop do if find.found如果 find.found,word vba 循环执行
【发布时间】:2020-07-03 07:09:32
【问题描述】:

我正在尝试使用 Word VBA 循环浏览一个文档,我想要做的是,如果我找到 .Text = "A" & vbTab,那么我想用 "A: " 替换它,然后转到末尾行,按一次 DEL 键并输入<br>。但我无法管理它,当我运行这段代码时,不知何故,单词一直在崩溃..

Sub marx()
Dim r As Range
Set r = ActiveDocument.Range

r.Find.ClearFormatting
With r.Find
    .Text = "A" & vbTab
    .Replacement.Text = "A: "
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute
End With

Do While r.Find.Found

Selection.EndKey Unit:=wdLine
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="<br>"
r.Find.Execute
Loop

End Sub

【问题讨论】:

    标签: vba ms-word do-while


    【解决方案1】:

    它可能会崩溃,因为代码进入了无限循环 - 因为 Find 一直在执行,并且由于您没有替换找到的词,它会一遍又一遍地寻找相同的搜索词。

    即使没有发生这种情况并且您确实执行了替换,结果也不会是您所期望的,因为选择仍然是您启动宏时的样子。

    首先,您需要执行替换,其次,您需要选择找到的范围(为了到达行尾,您确实需要选择)。最后,循环只需要一个 Find.Execute。

    这是成功解决您的问题的一种方法。请注意,我使用布尔值来判断搜索是否成功并对其进行测试,包括 Do 循环以及是否应该执行 Selection 操作。

    还要注意 Find.Execute 中的 Replace 参数 - 仅设置 Replacement.Text 是不够的。

    看看我如何在选择操作之前使用r.Select

    Sub marx()
        Dim r As Range
        Dim bFound As Boolean
    
        bFound = True
        Set r = ActiveDocument.content
    
        r.Find.ClearFormatting
        Do While bFound
            With r.Find
                .Text = "A" & vbTab
                .Replacement.Text = "A: "
                .Forward = True
                .wrap = wdFindContinue
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
                bFound = .Execute(Replace:=wdReplaceOne)
            End With
    
            If bFound Then
                r.Select
                Selection.EndKey Unit:=wdLine
                Selection.Delete Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="<br>"
            End If
        Loop    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2021-01-16
      • 2015-07-11
      • 2018-08-27
      • 2021-01-05
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      相关资源
      最近更新 更多