Найти текст после использования функции 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
Другие вопросы по тегам