Я не поленился и заглянул в справку на тему
StoryRanges Collection Object. Там приведен пример, который полностью, как мне кажется, соответствует твоим запросам.
Тебе нужно искать что-то в разных структурных элементах документа:
сносках, концевых сносках, колонтитулах и пр. Все эти структурные элементы, если они есть в документе, являются элементами коллекции
StoryRanges. Задача состоит в том, чтобы искать в каждом из этих элементов.
То, что ты делаешь сейчас, это переключение между разными видами (переход по этим структурным элементам на экране) и поиск в
Selection. Это не есть гуд. Чтобы получить элемент из документа в 99% случаев выбирать на экране его не нужно. К нему можно обратиться напрямую через объектную модель документа.
Вот немного измененный пример из справки. В нем перебираются все такие структурные элементы, которые есть в документе и в них ведется поиск. Этот метод будет работать пошустрее твоего с переключением видов, хотя бы потому, что не будет мелькат экран. Если не будет работать, пиши, разберемся.
- Код: Выделить всё
Sub FindInStories()
Dim myStoryRange As Range
For Each myStoryRange In ActiveDocument.StoryRanges
With myStoryRange
With .Find
.Text = "ааа"
.Replacement.Text = "ооо"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
While Not (.NextStoryRange Is Nothing)
Set myStoryRange = .NextStoryRange
With .Find
.Text = "ааа"
.Replacement.Text = "ооо"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Wend
End With
Next myStoryRange
End Sub