如何在VBA中的文档的每个段落中搜索术语的第一个实例?

时间:2019-05-16 21:59:54

标签: vba ms-word word-vba

我想在整个Word文档中搜索并突出显示两个单词,例如“ box”和“ blue”。但是我只想强调每个段落中每个单词的第一个实例。有时在我的文档中,“框”一词在段落中会弹出6或7次,这太多了。我只想知道该段涉及带有单个突出显示的“框”一词。

我可以使用以下代码搜索这两个单词的所有实例。但是,不幸的是,我做上面所说的事情的尝试非常失败,以至于我尴尬地编写了比下面更多的代码。

任何帮助将不胜感激。

代码:

Sub BoxBlue()
Dim range As range
Dim i as Long
Dim tlist

tlist = array("box", "blue")
For i = 0 to UBound(tlist)
Set range = ActiveDocument.range
With range.Find
.Text = tlist(i)
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False

Do While .Execute(Forward:=True) = True
range.HighlightColorIndex=wdYellow

Loop
End With
Next

End Sub

1 个答案:

答案 0 :(得分:0)

尝试:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long, ArrFnd()
ArrFnd = Array("box", "blue")
For i = 0 To UBound(ArrFnd)
  With ActiveDocument.Range
    With .Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = ArrFnd(i)
      .Replacement.Text = ""
      .Forward = True
      .Wrap = wdFindStop
      .Format = False
      .MatchCase = False
      .MatchWholeWord = True
      .MatchWildcards = False
      .MatchSoundsLike = False
      .MatchAllWordForms = False
      .Execute
    End With
    Do While .Find.Found = True
      .HighlightColorIndex = wdYellow
      .End = .Paragraphs.Last.Range.End
      .Collapse wdCollapseEnd
      .Find.Execute
    Loop
  End With
Next
Application.ScreenUpdating = True
End Sub