如何删除包含一个或多个单词的段落?

时间:2019-06-20 14:39:50

标签: vba ms-word

我正在尝试删除包含特定单词的段落。我解决了这个问题,如何删除更多的单词。

VBA


Dim check As Boolean
Dim search As String
Dim para As Paragraph
Dim tempStr As String
Dim txt As String

search = "word1","word2" #word2 doesn´t work

For Each para In ActiveDocument.Paragraphs
    txt = para.Range.Text
    tempStr = LCase(txt)
    check = InStr(tempStr, search)

    If check = True Then
        para.Range.Delete
    End If
Next

End Sub

2 个答案:

答案 0 :(得分:0)

您无法在VBA中创建字符串类型的字符串列表。您需要创建一个集合或数组,并遍历所有元素以检查每个元素。我会亲自使用一个收藏集。

dim search as Collection
dim colliter as variant

search.add "word1"
search.add "word2"

for each colliter in search
    For Each para In ActiveDocument.Paragraphs
        txt = para.Range.Text
        tempStr = LCase(txt)
        check = InStr(tempStr, colliter)
    next
next

答案 1 :(得分:0)

您的代码效率很低-无需遍历所有段落。试试:

Sub Demo()
Application.ScreenUpdating = False
Dim ArrFnd(), i As Long
ArrFnd = Array("One", "Two", "Three", "Four", "Five", "Six")
With ActiveDocument
  For i = 0 To UBound(ArrFnd)
    With .Range
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = ArrFnd(i)
        .Replacement.Text = ""
        .Forward = True
        .MatchCase = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
      End With
      Do While .Find.Found = True
        .Paragraphs.First.Range.Text = vbNullString
        .Collapse wdCollapseEnd
        .Find.Execute
      Loop
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub