遍历查找并替换换行符

时间:2019-06-08 13:16:04

标签: vba loops ms-word

我正在尝试创建一个宏,该宏可以找到一个字符串,并确保在字符串之后始终有3个换行符。

如果找到了第一章,则其后应该总是有3个换行符。 我需要循环遍历,直到出现这种情况为止(因此,如果“第一章”之后有7个换行符,则需要循环遍历直到3个。

不幸的是,我无法插入循环以删除3个以上的连续换行符

Sub ChapterLineBreaks()

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles( _
        "Heading 1,Chapter Heading")
    With Selection.Find
        .Text = "Chapter One^p^p^p^p"
        .Replacement.Text = "Chapter One^p^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

预期:

第一章

文字应从此处开始

1 个答案:

答案 0 :(得分:0)

您可能需要使用通配符,如下所示:

Sub ChapterLineBreaks()

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles( _
        "Heading 1,Chapter Heading")
    With Selection.Find
        .text = "(Chapter One)([^13]@)([!^13])"
        .Replacement.text = "\1^p^p^p\3"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

您会找到很好的信息hereherehere。我所做的是使用通配符定义正则表达式:“第一章{1个或更多换行符}其他文本”。然后,我将换行符替换为恰好3个换行符。