Я пытаюсь использовать Find, чтобы пройти через все вхождения определенного стиля.Этот фрагмент иллюстрирует проблему.
Public Sub test()
Dim rng As Range
Dim found As Boolean
Set rng = ActiveDocument.Range()
rng.Find.Style = "prod_code"
found = rng.Find.Execute()
rng.Start = rng.End
rng.End = ActiveDocument.Range().End
found = rng.Find.Execute()
End Sub
После первого выполнения found - True, rng.start - 152, rng.end - 153, а rng.text - «1».Непосредственно перед вторым выполнением rng.start и rng.end равны 153 и 27219, и значение rng.text отражает это.После того, как найденное второе выполнение выполнено, истина и начало и конец снова равны 152 и 153.
Путем поиска текста и стиля я установил, что второй поиск начинается с нуля, а не до концаи затем перенос (хотя он все еще должен переноситься в пределах диапазона).
Конечное значение принимается как данное.Если я установлю его перед первым соответствием, то Execute вернет False.
Я попытался создать новый диапазон для второго поиска, но он ведет себя так же.
Я пробовал это с MS Office2007 и 2016, и с методами Execute и Execute2007, так что, предположительно, это поведение предназначено, но как мне искать диапазон, который не начинается с нуля?
Я только что понял, что первое появление стиляЯ искал это в клетке стола.Когда я запускаю свой тестовый код в документе без таблиц, он ведет себя так, как я ожидал, то есть второй результат поиска находился в пределах диапазона поиска.Это дает мне новую линию атаки, но фундаментальная проблема остается.Я хочу найти стиль в пределах определенного диапазона документа, независимо от того, включает ли этот диапазон таблицу или часть таблицы.