1

Тема: Помогите разобраться с ListLevelNumber

Пытаюсь сделать макрос создания оглавления, т.к. формат существующего оглавления в Word не устраивает.

Включаю в оглавление параграфы в цикле по параметру: ActiveDocument.Paragraphs(i).Range.Style.ListLevelNumber

Каждому стилю параграфа можно присвоить ListLevelNumber, для основного текста он = 0.

Для "Заголовок 1" ListLevelNumber = 1, "Заголовок 2" = 2 (по умолчанию) и т.п.

Но для многоуровневых нумерованных списков ListLevelNumber = не меньше 1. Т.е. хоть первый их уровень, хоть девятый - дают ListLevelNumber = 1.

Пробовал установить для уровня списка связь со стилем, а уже в стиле установить уровень.
Ничего не получается. Все равно для любого уровня многоуровневого нумерованного списка ListLevelNumber = 1.

Есть и такая коллекция с уровнями, в которую входят только папаграфы списков документа:
ActiveDocument.ListParagraphs.Item(i).Range.Style.ListLevelNumber
В ней уровни определяются правильно, начиная с 1.

Но непонятно, как перебирая параграфы в цикле, вычислять, из какой коллекции брать уровень - из коллекции параграфов документа или из коллекции листПараграфов.

Допустим, в документе первые 10 параграфов просто отформатированы стилями, а следующие 10 представляют собой список, отформатированный стилями согласно указаниям внутри самого стиля списка.
Тогда, просматривая в цикле коллекцию ActiveDocument.Paragraphs, для всех параграфов второго десятка я получу
ListLevelNumber = 1, хотя реально там будут разные уровни вложенности.
А если я буду просматривать коллекцию ActiveDocument.ListParagraphs, то я считаю правильные уровни у второго десятка, но первый десяток параграфов не увижу.

Как в цикле просматривая параграфы, получить правильный уровень ListLevelNumber, независимо от того, является ли параграф элементом нумерованного списка или не является?

2

Re: Помогите разобраться с ListLevelNumber

Я думаю, что нужно копать в сторону OutlineLevel для каждого абзаца

Лучше день потерять — потом за пять минут долететь!

3

Re: Помогите разобраться с ListLevelNumber

Вопрос решен.

Черновой код, но уже работает.
Переменная l будет содержать ListLevelNumber параграфа

.Paragraphs(i).Range.Select
            If Selection.Range.ListParagraphs.Count = 0 Then
                'В параграфе отсутствуют листПараграфы
                l = .Paragraphs(i).Range.Style.ListLevelNumber
            Else
                Set par = Selection.Range.ListParagraphs.Item(1).Range
                'Это параграф списка, берем его уровень из его 1 листПараграфа
                l = par.ListFormat.ListLevelNumber
            End If