从选择中删除以特定单词开头的段落

时间:2019-01-10 13:26:21

标签: vba ms-word

我要从选择中删除以字符串“ Page:”开头的段落

这是我的示例文本:

  

第28页

     

页:44包含很多示例。但是请在这里查看详细信息   说明。这可能会超过一,两或三行。这个   完全取决于文字的长度

     

日期:2018年1月10日

     

某些文本在这里,第108页

     

我在这里还有更多文字

     

更多

     

最终文本

     

页数:208

     

到此结束

我到目前为止的代码:

Sub DelPara()

    Dim para As Paragraph

    With Selection.Range.Find
        .ClearFormatting
        .Text = "[^13^11]Page:"
        .Forward = True
        .MatchWildcards = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        If (Selection.Range.Find = True) Then
            para.Range.Delete
        End If

    End With

End Sub

输出应为

  

日期:2018年1月10日

     

某些文本在这里,第108页

     

我在这里还有更多文字

     

更多

     

最终文本

     

到此结束

2 个答案:

答案 0 :(得分:0)

下面的代码将搜索当前选择项中搜索词的所有实例,并删除搜索词以及该词的末尾所在的整个段落。

此操作的关键是使用两个Range对象:一个用于搜索原始范围(选择),另一个用于实际搜索。这样,可以将执行实际搜索的范围从上一次成功搜索的末尾扩展到原始范围的末尾。

Sub DelPara()
    Dim rngFind As Word.Range, rngSel As Word.Range
    Dim para As Paragraph
    Dim bFound As Boolean

    Set rngSel = Selection.Range
    Set rngFind = rngSel.Duplicate

    With rngFind.Find
        .ClearFormatting
        .text = "[^13^11]Page:"
        .Forward = True
        .MatchWildcards = True
        .wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    bFound = rngFind.Find.Execute
    Do While bFound
        rngFind.End = rngFind.paragraphs.Last.Range.End
        rngFind.Delete
        rngFind.Collapse wdCollapseEnd
        rngFind.End = rngSel.End
        bFound = rngFind.Find.Execute
    Loop

End Sub

答案 1 :(得分:0)

您需要的只是一个通配符查找/替换为:

Find = ^13Page:[!^13]{1,}
Replace = nothing

不需要代码。至多,您可能需要在文档的开头插入一个空的段落,然后再将其删除-但只有在第一个段落以'Page:'开头时,才可以删除它。不过,作为宏:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  .InsertBefore vbCr
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^13Page:[!^13]{1,}"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
  .Characters.First = vbNullString
End With
Application.ScreenUpdating = True
End Sub

如果只想处理选定的范围,请将“ ActiveDocument”更改为“选择”。