【问题标题】:VBA - WORD Deleting rows after and before specific wordVBA - WORD 删除特定单词之后和之前的行
【发布时间】:2020-02-26 13:58:54
【问题描述】:

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

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

某处发生了什么事!

website.com 08.01.2019

某事发生在某个地方,这是一个坏人做的。 他在代码中使用空格而不是制表符。

TAG-重要的东西


网站 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 的新手,因此我需要一些指示。

【问题讨论】:

  • 这不是 100% 清楚的。宏应该如何知道“找到”什么?你会每次都把它输入宏吗?那么代码应该删除找到的词之前和之后的段落吗?
  • “行”不是 Word 对象。您可以对单词、句子或段落进行操作。您对Selection.Expand Unit:=wdParagraph 的概念很好,它删除了带有sugth for 一词的整个段落。在此处查看更多信息:docs.microsoft.com/en-us/office/vba/api/word.range.expand

标签: vba ms-word


【解决方案1】:

以下代码基于问题中的示例,从文档的开头到结尾搜索术语。找到后,删除该术语之后和之前的段落。然后将搜索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

【讨论】:

  • 我尝试使用您的宏,但出现运行时错误“91”。未设置对象变量或 With 块变量。 Set para = oRng.Next(wdParagraph, -1).Paragraphs(1) 标记了这一行。我应该使用选项严格来解决这个问题吗?
  • 有趣的@Qdm。我在发布之前确实对此进行了测试......文档中“找到”术语之前的内容是什么?显然,Word 没有找到段落。
猜你喜欢
  • 2020-01-27
  • 1970-01-01
  • 2020-10-08
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多