Работа с объектами Word Range
поможет в этом.Думайте о Range
как о невидимом выделении, за исключением того, что код может работать с несколькими Range
объектами, тогда как может быть только один Selection
.
Назначьте содержимое документа для Range
, затем выполните Find
и расширение для него.Затем форматирование также можно применить к Range
.Я изменил (но не проверял) код в вопросе для демонстрации.
В последней части, где текст пишется в конце документа, объект Range
устанавливается на весь документ, а затем рухнул (думать об этом, как нажатие клавиши со стрелкой вправо с выбором).Затем новый текст назначается диапазону и применяемому форматированию.Поскольку диапазон будет содержать только новый текст, форматирование применяется только к этому.
(Дополнительные примечания. Я изменил имя переменной Word
на sWord
, поскольку слово «Word» может быть неправильно понято.чтобы означать приложение Word. Я также изменил сравнение, чтобы проверить, содержит ли sWord
что-то на Len(sWord) > 0
, потому что сравнение "больше, чем" "не гарантируется.)
Sub a3()
Dim sWord As String
Dim wcount As Integer
Dim rng as Word.Range
Set rng = ActiveDocument.Content
sWord = InputBox("Search for a word")
If (sWord <= "") Then
MsgBox ("Did not enter word")
End If
If (Len(sWord) > 0) Then
wcount = 0
With Selection
.HomeKey Unit:=wdStory
With rng.Find
.Text = sWord
Do While .Execute
wcount = wcount + 1
rng.Collapse wdCollapseEnd
Loop
End With
MsgBox ("The word: '" & sWord & "' shows up " & wcount & " times in the document")
End With
End If
Set rng = ActiveDocument.Content
rng.Collapse wdCollapseEnd
If (wcount <= 2) Then
rng.Text = (vbCrLf & "Number occurrences: " & wcount)
rng.Font.ColorIndex = wdRed
ElseIf (wcount <= 3) Then
rng.Text = (vbCrLf & "Number occurrences: " & wcount)
rng.Font.ColorIndex = wdRed
rng.Font.Bold = True
Else
rng.Text = (vbCrLf & "Number occurrences: " & wcount)
rng.Font.ColorIndex = wdBlack
rng.Font.Bold = False
End If
End Sub