Да, это возможно. Это включает прерывание поиска в каждом «найденном» для добавления комментария. Чтобы сделать это эффективно, лучше работать с Range
объектом, а не с Selection
.
Метод Find.Execute
возвращает логическое значение: true при успешном поиске. Вы можете использовать это, чтобы проверить, должен ли быть вставлен комментарий, а также чтобы узнать, когда код должен остановиться.
Обратите внимание, что также важно использовать Find.Wrap = wdFindStop
, чтобы избежать зацикливания кода "бесконечно".
Sub FindRedAndComment()
Dim rngFind As word.Range
Dim doc As word.Document
Dim sFindText As String
Dim sCommentText As String
Dim bFound As Boolean
Set doc = ActiveDocument
Set rngFind = doc.content
sFindText = "test"
sCommentText = "comment"
With rngFind.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Color = wdColorRed
.Text = sFindText
.Forward = True
.wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = True
bFound = .Execute(Replace:=wdReplaceOne)
End With
Do Until Not bFound
If bFound Then
doc.Comments.Add rngFind, sCommentText
rngFind.Collapse wdCollapseEnd
rngFind.End = doc.content.End
bFound = rngFind.Find.Execute(Replace:=wdReplaceOne)
End If
Loop
End Sub