1

Тема: Абзац уровня 1

В тексте документа имеются разделы с заголовками, как со стилями "Заголовок 1", так и с другими стилями. Эти абзацы имеют уровень 1.
Перемещаться по разделам со стилем Заголовок не сложно, но вот как с такой же легкостью перемещаться по заголовкам разделов с другим стилями?
Метод перебора абзацев неплох, но при большом объеме текста становится довольно длительным.
Если кто то знает как быстро перемещаться по абзацам имеющих уровень 1 прошу подсказать.

2

Re: Абзац уровня 1

mikkelle пишет:

Если кто то знает как быстро перемещаться по абзацам имеющих уровень 1 прошу подсказать.

Можно поступить так: в диалоге "Поиска" указать поиск по атрибуту абзаца "Уровень 1", выполнить поиск, а далее использовать комбинации "Ctrl+PgDn" и "Ctrl+PgUp" для поиска в документе следующего/предыдущего абзаца с этим атрибутом.

3

Re: Абзац уровня 1

yshindin пишет:
mikkelle пишет:

Если кто то знает как быстро перемещаться по абзацам имеющих уровень 1 прошу подсказать.

Можно поступить так: в диалоге "Поиска" указать поиск по атрибуту абзаца "Уровень 1", выполнить поиск, а далее использовать комбинации "Ctrl+PgDn" и "Ctrl+PgUp" для поиска в документе следующего/предыдущего абзаца с этим атрибутом.

Разумеется, можно записать это в виде макроса VBA и обернуть в необходимый цикл типа "Do While". Если при очередном "нажатии" (или выполнении операции Selection.Find.Execute) границы Selection не изменятся (или Selection.Find.Found установится в False), то цикл завершен.

4

Re: Абзац уровня 1

yshindin пишет:

Разумеется, можно записать это в виде макроса VBA и обернуть в необходимый цикл типа "Do While".

Для ускорения работы лучше не использовать объект Selection, а применять диапазон. Например, так:
'-----------------------------
Sub ScanLevel1Paragraphs()
Dim r As range
Dim pfound As Boolean
Dim p As Paragraph
Set r = ActiveDocument.range
pfound = True
While pfound
    'поиска абзаца
    With r.Find
        .ParagraphFormat.OutlineLevel = wdOutlineLevel1
        .Execute Findtext:="", Forward:=True
        pfound = .Found
    End With
    If pfound Then
        'Обработка очередного найденного абзаца
        Set p = r.Paragraphs(1)
        'и т.д.
    End If
Wend
Set r = Nothing
End Sub
'------------------------------

5

Re: Абзац уровня 1

Если  абзацы имеют уровень 1, то Вы можете перемещаться по ним в области Навигация (вне зависимости от того, называется ли стиль Заголовок или нет).

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

6

Re: Абзац уровня 1

Alex_Gur пишет:

Если  абзацы имеют уровень 1, то Вы можете перемещаться по ним в области Навигация (вне зависимости от того, называется ли стиль Заголовок или нет).

Да, но mikkelle, видимо, имеет в виду программный поиск абзацев по документу не путем перебора всех абзацев, а путем их ускоренного поиска по различным атрибутам. Тут много возможностей, напр., можно искать и по нужному стилю:
...
    With r.Find
        .Style = wdStyleListNumber
        .Execute Findtext:="", Forward:=True
        pfound = .Found
    End With
...

7

Re: Абзац уровня 1

Alex_Gur пишет:

Если  абзацы имеют уровень 1, то Вы можете перемещаться по ним в области Навигация (вне зависимости от того, называется ли стиль Заголовок или нет).

Увы, нет. Если только мы говорим об одной и той же области навигации и если к ней не существует специальных настроек.
Я предполагал, что это можно как то реализовать через режим структуры.

yshindin, спасибо вам за отклик. Но я сейчас и так реализую данную проблему этим методом.
Использование метода find хотелось бы избежать именно из-за вопроса применения selection.