如果在删除整个部分的部分中找到文本,则为Vba

时间:2016-06-16 14:50:01

标签: vba ms-word word-vba

如何删除在word文档中重复的某些部分。第一部分有单词“example”,第二部分有单词“example.com”。如果找到这些字符串,请删除整个部分

Dim Sect As Section
For Each Sect In ActiveDocument.Sections
If ActiveDocument.Sect.Range.Find.Text = "example" Or ActiveDocument.Sect.Range.Find.Text ="example.com" Then 
Activedocument.Sect.Range.delete
Next

同样从第5节开始循环浏览整个word文档

1 个答案:

答案 0 :(得分:1)

你有几个问题。

1)你不是试图从第5节开始,所以它显然不会这样做。但是,即使您正在测试此代码,您的代码也会中断,因为您正在删除部分并循环前进。您需要反向检查部分,然后删除它们是否包含字符串"示例"

2)你找到字符串的尝试不会奏效。如果您曾尝试运行代码,注意到在运行代码时遇到的错误并说明错误发生的行,那就太好了。就是这样,这没有任何意义。如果您愿意,可以查看find方法的文档,但InStr函数将更好地工作,如下所示。

3)当您使用构造时,"对于每个Sect In ActiveDocument.Sections,"  " Sect"变量已成为该部分。它知道它是什么文件。" ActiveDocument.Sect ...."不管用。你只需要在那时使用Sect。我使用了不同的循环方式,但这个想法保持不变。

4)如果您已经在搜索文本"示例"在一个字符串中,搜索文本" example.com"是没有意义的"例子"已经在搜索字符串中。只做一次搜索。

<rant>

正如我暗示的那样,请尝试记录产生错误的确切错误和确切的代码行。虽然您提供了“尝试过”的代码,但您根本没有付出太多努力。遇到问题时,我建议您通过以下方式进行调试:a)实际运行代码并查找错误,b)通过研究您尝试使用的方法/属性来查看是否存在明显的语法问题,以及c)检查变量使用debug.print或locals窗口查看它们是否包含您认为的<\rant>

下面的工作代码。

子测试()

Dim mysects As Sections
Dim mysect As Section

Set mysects = ActiveDocument.Sections

For x = mysects.Last.Index To 5 Step -1
    Set mysect = mysects.Item(x)
    If InStr(1, mysect.Range.Text, "example", vbTextCompare) _
       Or InStr( 1, mysect.Range.Text, "nextText", vbTextCompare) Then
        mysect.Range.Delete
    End If

Next x

End Sub