VBA 查找和替换功能 - 将循环放在哪里?MS Word



我一辈子都无法弄清楚我需要将循环放在我的查找和替换函数中的位置。

我有连续

有 3+ 换行符的文档。我正在编写一个查找和替换函数,该函数查找 3 个换行符并将其替换为仅 2 个换行符。我需要循环访问它,直到只剩下 2 个换行符。

查看文档示例的预期结果和实际结果。

我试过把它放在"与选择.查找"中,但它不起作用?

Private Function FindReplaceLineBreaks()
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^p^p^p"
        .Replacement.Text = "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Function

Document example:
Chapter 1
Linebreak
Linebreak
Linebreak
Linebreak
Linebreak
This is some text etc. etc.
Linebreak
Linebreak
Linebreak
Linebreak
Linebreak
Linebreak
Linebreak
Linebreak
Linebreak
Text
Expected:
Chapter 1
Linebreak
Linebreak
This is some text etc. etc.
Linebreak
Linebreak
Text

最简单的方法是使函数递归(函数自行调用(。将这一行添加到函数的底部:

If (Selection.Find.Found = True) then call FindReplaceLineBreaks

试试这个:

Private Function FindReplaceLineBreaks()
    with Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "^p^p^p"
        .Replacement.Text = "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        Do While .Execute(Replace:=wdReplaceAll)
        Loop
    End With
End Function

最新更新