Есть две проблемы с кодом, которые в остальном весьма хороши:
Он использует wdFindContinue
для свойства Wrap
, что означает, что Find будет перезапущен в началедокумент.Как правило, всегда используйте wdFindStop
в коде.
Необходимо переместить найденный диапазон за пределы этой точки, если искомый объект остается в документе.Это можно сделать с помощью Range.Collapse
.Подумайте об этом, как о нажатии клавиши со стрелкой вправо на клавиатуре, когда у вас есть выделение: курсор помещается за пределы того, что было выделено.
Я изменил исходный код с помощью этихдва изменения, плюс я объявил переменную Range
.То, что исходный код выполнялся без этого объявления, указывает, что Option Explicit
не может быть в верхней части модуля кода.Намного лучше, если это там ...
Sub JumpBeyondFound()
Dim r As Word.Range
Dim bFound As Boolean
bFound = True
Set r = ActiveDocument.content
r.Find.ClearFormatting
Do While bFound
With r.Find
.Text = ":"
.Replacement.Text = ":</b>"
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
End With
If bFound Then
r.Select
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="<b>"
Selection.EndKey Unit:=wdLine
Selection.MoveRight
r.Collapse wdCollapseEnd
End If
Loop
End Sub