Трюк с чем-то вроде этого заключается в работе с несколькими Range
объектами. Мое личное предпочтение состоит в том, чтобы объявлять Range для каждой отдельной вещи, с которой нужно работать, вместо того, чтобы пытаться вычислить минимум и повторно использовать Range - по крайней мере, для исходного кода и в целях тестирования.
Затем для этой задачи я использую четыре диапазона: 1) для исходного поиска, 2) для конца требуемой "позиции курсора", 3) для второго поиска, 4) для конечной "позиции курсора" ».
Другие важные понятия - как «свернуть» диапазон и как «скопировать» его.
Свертывание диапазона - это как нажатие клавиши со стрелкой вправо или влево с выделением, так что это «точка» и ничего не содержит. Диапазон может быть свернут до начальной или конечной позиции.
Копирование диапазона (установка одного диапазона на другой) необходимо выполнить с помощью свойства Duplicate
, чтобы копия не зависела от оригинала. Иначе, когда один из них изменяется, другой тоже меняется.
Sub FindfilenameDate()
Dim rngFind As Word.Range, rngBefore As Word.Range
Dim rngAfter As Word.Range, rngFound As Word.Range
txt_prior_to_expDate = "\"
txt_after_expDate = "0000"
Set rngFind = ActiveDocument.content
With rngFind.Find
.Text = txt_after_expDate
.Forward = True
.Execute
If .found = True Then
Set rngAfter = rngFind.Duplicate
rngAfter.Collapse wdCollapseStart
Set rngBefore = rngFind.Duplicate
rngBefore.Collapse wdCollapseStart
With rngBefore.Find
.Text = txt_prior_to_expDate
.Forward = False
.Execute
If .found = True Then
Set rngFound = rngBefore.Duplicate
rngFound.Collapse wdCollapseEnd
rngFound.End = rngAfter.Start
'rngFound.Select
End If
End With
End If
End With
'expDate = CursorPosition(expDateStart_cursorPos, expDateEnd_cursorPos)
MsgBox ("expDate = " & rngFound.Text) 'DELETEMSGBOX
End Sub