Найти текст после использования функции Selection.Extend
Я использовал Selection.Extend
сделать выбор конкретного текста из Start
в End
Теперь текст находится в выделении из следующего кода:
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Start"
.Forward = True
.Wrap = wdFindStop
End With
Selection.Find.Execute
If Selection.Find.Found = False Then
Else
Selection.Extend
Selection.Find.ClearFormatting
With Selection.Find
.Text = "End"
.Forward = True
.Wrap = wdFindStop
End With
Selection.Find.Execute
End If
после выбора я хочу найти "ABCD" в выделенном тексте по следующему коду:
Selection.Find.ClearFormatting
With Selection.Find
.Text = "ABCD"
.Forward = True
.Wrap = wdFindStop
End With
Selection.Find.Execute
If Selection.Find.Found = True Then
MsgBox ("Found")
Else
MsgBox ("Not Found")
End If
но вместо того, чтобы найти это Расширение выбора до ABCD
где бы то ни было.
так что мой вопрос, как мне избежать предыдущего выбора и selection.Find.Execute
ABCD
в Start
а также End
?
2 ответа
Я думаю, что есть некоторые недоразумения о том, что на самом деле делает Selection.Extend, вы можете прочитать об этом в справочнике по языку. Он эмулирует команду клавиатуры в пользовательском интерфейсе, которая расширяет текущий выбор с помощью предварительно определенных "переходов".
Из вашего описания я понимаю, что вы хотите найти первый поисковый термин в документе ("Пуск"). Если он присутствует, выполните поиск до конца документа по второму поисковому запросу ("Конец"). Если это также найдено, ищите между двумя терминами третий поисковый запрос.
Лучше всего это сделать, используя три диапазона, по одному для каждого поискового запроса. Что-то вроде этого:
Dim rngStart as Word.Range, rngEnd as Word.Range, rngTarget as Word.Range
Dim bFound as Boolean
Set rngStart = ActiveDocument.Content
bFound = rngStart.Find.Execute(FindText:="Start", Forward:=True, Wrap:=wdFindStop)
If bFound Then
Set rngEnd = rngStart.Duplicate
bFound = rngEnd.Find.Execute(FindText:="End", Forward:=True, Wrap:=wdFindStop)
If bFound Then
rngStart.End = rngEnd.End 'Extend first Found to include second Found
Set rngTarget = rngStart.Duplicate
bFound = rngTarget.Find.Execute(FindText:="ABCD", Forward:=True, Wrap:=wdFindStop)
If bFound Then
MsgBox "Found"
Else
MsgBox "Not found"
End If
End If
End If
Я только что проверил, ты .Wrap
является wdFindStop
, Курсор находится в конце поиска, и вы находите .Forward = True
, Поскольку вы в конце, смотрите до остановки, он не найдет его.
Тестовый текст:
Начало ABCD Конец
Я получил его на работу после изменения:
.Forward = True
в
.Forward = False
в вашем Selection.Find
за "ABCD"
Редактировать:
затем
If Selection.Find.Found = True Then
Selection.Collapse wdCollapseEnd
Selection.Expand wdWord
Else
MsgBox("Not Found")
End If