Как я могу найти первый экземпляр термина в каждом абзаце документа в VBA? - PullRequest
2 голосов
/ 17 мая 2019

Я хотел бы найти и выделить два слова - скажем, «коробка» и «синий» - во всем документе Word.Но я только хочу выделить первый экземпляр каждого слова в каждом абзаце.Иногда в моем документе слово «коробка» всплывает 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 голосов
/ 17 мая 2019

Попробуйте:

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
...