VBA, Word: ошибка? Выбор с помощью макроса и ручной выбор дает другой результат с.View.CollapseOutline
Мне нужно создать макрос, который сворачивает каждый заголовок 1 в представлении структуры, кроме активной "нити". Для этого я делаю Find и пытаюсь свернуть те Heading1-ы, которые не совпадают с именем выбранного заголовка текста.
Я экспериментирую с ActiveDocument.ActiveWindow.View.CollapseOutline
Если я запускаю TripleClick на многоуровневом заголовке 1 (вручную) и набираю эту команду в окне "Исправить", он должным образом сворачивает ВСЕ уровни ниже заголовка.
Если я даю ЛЮБЫЕ параметры, как range:=activedocument.Paragraphs(1).Range
, он падает только на самый низкий уровень ниже указанного диапазона!
Также, если я получу свой выбор или rangeObject в моем макросе из поиска (вместо эксперимента с ручным выбором):
Четное ActiveDocument.ActiveWindow.View.CollapseOutline
не разваливается полная ветка, только последний уровень; один уровень для каждого исполнения.
Почему это так?
Как я могу заставить VBA свернуть все уровни структуры ТОГО определенного выбранного Заголовка1?
Для отслеживания ошибок: я использую Word 2016
РЕДАКТИРОВАТЬ:
Поскольку мне нужно было рабочее решение, я создал уродливый, но работающий обходной путь.
Я все еще жду правильного решения / объяснения основной причины проблемы, но вот мой обходной путь:
Do While TeljesSearch.Find.Execute
If Not TeljesSearch.Text = JoHeading Then
loopCounter = loopCounter + 1
If loopCounter = 1 Then refStart = TeljesSearch.Start
If refStart = TeljesSearch.Start Then
If parCounter = TeljesSearch.Document.Range.Paragraphs.Count Then
Exit Do
End If
parCounter = TeljesSearch.Document.Range.Paragraphs.Count
End If
ActiveDocument.ActiveWindow.View.CollapseOutline Range:=TeljesSearch
End If
Loop
Он удерживает цикл поиска и сворачивает уровень заголовка 1 за раз.
После полного цикла документа он проверяет, изменился ли видимый счетчик абзацев или нет.
Если значение параметра accountcount одинаково, это означает, что содержимое больше не свернуто, поэтому он выходит из цикла. "Блех"...
EDIT2
Вышеупомянутый обходной путь работал хорошо только для небольших файлов; в большом документе это источник ресурсов для аварийной ситуации... поэтому я создал обратную установку как WorkaroundOfTheWorkaround, пометив каждый заголовок уровня текста, который я оставил, и после его открытия начинается показ уровня 1 и открытие только помеченных заголовков. После того, как все помеченные открыты, макрос удаляет маркеры. Это гораздо более быстрый и стабильный подход.
Слово | VBA - Как запустить Word в режиме Outline - открывается именно там, где вы остановились?