Следующий код работает для меня.
Он начинается с помещения названий месяцев в массив. В цикле в массиве каждое имя отправляется в процедуру FindMonths
вместе с объектом Range
, который нужно найти. Ввод кода, который должен повторяться в своей собственной процедуре, избавляет от необходимости набирать его.
Обратите внимание, как процесс Find
работает с Range
(а не Selection
объектом). Как правило, отслеживание происходящего более надежно с диапазоном, чем с выбором.
Обратите внимание, также, что после обработки одного "найденного" Range
устанавливается для расширения от точки после того, как найден один экземпляр месяца, до конца документа. Это гарантирует, что будет найден весь, а не только первый экземпляр месяца.
Sub ProcessMonths()
Dim sFindText As String
Dim aMonths As Variant
Dim i As Long
aMonths = Array("January", "February", "March", "April", "May", "June", "July", "August", _
"September", "October", "November", "December")
For i = LBound(aMonths) To UBound(aMonths)
sFindText = aMonths(i)
FindMonths sFindText, ActiveDocument.content
Next
End Sub
Sub FindMonths(month As String, searchRange As Range)
Dim bFound As Boolean
bFound = searchRange.Find.Execute(month)
Do While bFound
searchRange.Collapse wdCollapseEnd
searchRange.Delete wdCharacter, 1
searchRange.Text = Chr(160)
searchRange.End = searchRange.Document.content.End
bFound = searchRange.Find.Execute(month)
Loop
End Sub