VBA-WORD删除特定单词之后的行

时间:2019-07-04 08:48:28

标签: vba ms-word word-vba

我正在尝试使用VBA清理Word文档。

我需要做的是找到一个特定的单词(通常是一个网站),然后选择它所在的行,然后选择然后删除上方的文本行(仅1行),以及该网站行下的行(有时大于2-如果文本较长)。我将尝试向您展示这条线的外观。

某处发生了什么事!

website.com 08.01.2019

某处发生了某些事情,这是一个坏人。  他在代码中使用空格而不是制表符。

重要的标签


该网站99%的时间未显示在第一行,因此我试图找到第二行。 我还想保留其他网站和文本(因此会跳过newsbetter.com) 在每个文档中,大约有30-100个像我早先键入的那样的段落(确实删除了)

我一直在互联网上寻找可能的解决方案,但它们通常用于Excel。我认为字符串在这里对我不起作用。

Sub ScratchMacroII()
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
  .Text = "news.pl"
  While .Execute
    While oRng.Find.Found
        oRng.Select
        Selection.Expand Unit:=wdParagraph
        Selection.Delete
     Wend
End With
End Sub

我希望结果删除整个段落,但只是删除一行而剩下另一行。因为我是VBA的新手,所以我需要一些指针。

1 个答案:

答案 0 :(得分:0)

以下代码基于问题中的示例,从文档的开头到结尾搜索术语。找到后,删除该术语之后和之前的段落。然后,将搜索Range设置为文档内容遵循找到的实例,这样就不会重复拾取同一实例。

请注意,我加入了Find.Wrap = wdFindStop是为了防止代码再次循环遍历文档。还必须在循环中重复Execute方法,而不是尝试在其上循环。 While...Wend是旧的循环类型;首选Do While...Loop

Sub ScratchMacroII()
Dim oRng As Word.Range
Dim para As Word.Paragraph
Dim found As Boolean

Set oRng = ActiveDocument.Range
With oRng.Find
  .Text = "news.pl"
  .wrap = wdFindStop
  found = .Execute
    Do While found
        Set para = oRng.Next(wdParagraph, 1).Paragraphs(1)
        para.Range.Delete
        Set para = oRng.Next(wdParagraph, -1).Paragraphs(1)
        para.Range.Delete
        oRng.Collapse wdCollapseEnd
        oRng.End = ActiveDocument.content.End
        found = oRng.Find.Execute
     Loop

End With
End Sub