Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим, как в Word создать список многоуровневого типа.
При создании многоуровневого списка программа Word берет на себя большую часть работы, так как нам остается выбрать только нужный шаблон (маркированный или нумерованный список). Если в начале заданного абзаца нажать кнопку табуляции, то произойдет автоматическая смена шаблона. При желании мы можем выбрать нужные абзацы и нужный шаблон или задать собственный.
Многоуровневый список в Word
Что бы вам было все понятно, рассмотрим несколько примеров создания многоуровневого списка в Word. Предварительно подготовим текст, который будет содержать 10 абзацев.

Создать многоуровневый список в документе Word, который состоит из трех уровней. Первый уровень будет содержать цифры («1.»), второй – маленькие латинские буквы («a.»), а третий – квадратные маркеры.
- Выделяем весь текст и на панели выбираем список «Нумерация«.
- Теперь выделим абзацы с 3 по 6 и нажмем кнопку табуляции. Программа автоматически покажет, как в Word создать список из маленьких латинских букв.
- Теперь снова нажимаем кнопку табуляции для абзацев c и d, автоматически произойдет формирование многоуровневого списка Word, содержащего римские буквы.
- Выделяем оба абзаца с арабскими буквами и применяем список «Маркер«, (смотрите статью «Создание маркированного списка в Word«)
- Все, мы показали, как в Word создать многоуровневый список нужного формата.

Нужно создать многоуровневый Word список, каждый уровень будет содержать нумерацию – арабские цифры и отделятся табуляцией.
- Можно проделать действия, аналогичные предыдущим, и для каждого уровня выбрать список в виде арабских цифр на панели задач.

Создание многоуровневого списка в Word, содержащего два уровня, но, без табуляции.
- В этом случае мы применяем ко всем абзацам нумерованный список, далее, выделяем нужные абзацы и нажимаем правую кнопку мыши.
- В контекстном меню надо выбрать пункт «задать начальное значение«. Задаем число 1 и все, у нас появился вложенный нумерованный список.
Хорошо, как вручную создать в Word многоуровневый список мы рассмотрели – ничего сложного нет. Теперь давайте попробуем проделать то же самое, но, программным путем с помощью объектной модели Word. Для этого мы напишем два программных кода, на языке VBScript и JScript.

Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Создание простого многоуровневого списка Word ' 1_spiski_v_word.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, oRange, oPars dim LT, REnd, x, i set oWord = WScript.CreateObject("Word.Application") ' Класс Word set oDoc = oWord.Documents ' Коллекция Documents oDoc.Add() ' Создаем новый документ set oSel = oWord.Selection ' Объект Selection oWord.Visible = True ' Делаем документ видимым set oRange = oDoc(1).Range() ' Класс Range ' Вставляем текст 20 раз For i=0 to 20 oSel.TypeText "Многоуровневый список в word" oSel.TypeParagraph ' Вставляем абзац Next set oPars = oRange.Paragraphs ' Коллекция Paragraps set LT = oDoc(1).ListTemplates.Add(true) ' Объект Template ' Определяем формат для каждого уровня For x = 1 To 9 With LT.ListLevels(x) .NumberStyle = 0 ' стиль .NumberPosition = oWord.InchesToPoints(0.25 * (x - 1)) .TextPosition = oWord.InchesToPoints(0.25 * x) End With Next ' Конечная позиция для текста REnd = oPars(oPars.Count).Range.End ' применяем созданный шаблон oRange.ListFormat.ApplyListTemplate LT ' Вызываем процедуру LRange с разными параметрами call LRange(3,15):call LRange(5,15):call LRange(7,10):call LRange(8,10):call LRange(12,15) ' Процедура выбора диапазона и вставки уровня как в word создать список Sub LRange(a, b) With oRange .setRange 0, REnd .setRange oPars(a).Range.Start, oPars(b).Range.End .ListFormat.ListIndent End With End Sub |
Программный код на языке JSCRIPT:
// ---------------------------------------------------------------------------- // Создание простого многоуровневого списка Word // 1_spiski_v_word.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oRange1, oPars1; var LT, REnd, x, i; oWord1 = WScript.CreateObject("Word.Application"); // Объект Word oDoc1 = oWord1.Documents; // Коллекция Documents oDoc1.Add(); // Создаем новый документ oSel1 = oWord1.Selection; // Объект Selection oWord1.Visible = true; // Делаем документ видимым oRange1 = oDoc1(1).Range(); //Объект Range // Вставляем текст 22 раз for(i=0; i<=20; i++){ oSel1.TypeText("Многоуровневый список в word"); oSel1.TypeParagraph(); // Вставляем абзац } oPars1 = oRange1.Paragraphs; //Коллекция Paragraphs LT = oDoc1(1).ListTemplates.Add(true); // Объект Template // Определяем формат для каждого уровня for(x=1; x<=9; x++){ with (LT.ListLevels(x)){ NumberStyle = 0; // стиль списка NumberPosition = oWord1.InchesToPoints(0.25 * (x - 1)); TextPosition = oWord1.InchesToPoints(0.25 * x); } } // Конечная позиция для текста REnd = oPars1(oPars1.Count).Range.End; // применяем созданный шаблон oRange1.ListFormat.ApplyListTemplate(LT); // Вызываем процедуру LRange с разными параметрами как в word создать список LRange(3,15); LRange(5,15); LRange(7,10); LRange(8,10); LRange(12,15); // Процедура выбора диапазона и вставки уровня function LRange(a, b){ with(oRange1){ setRange(0, REnd); setRange(oPars1(a).Range.Start, oPars1(b).Range.End); ListFormat.ListIndent(); } } |
В данном примере мы сначала создаем новый документ и вставляем в него текст 20 раз, в конце каждой строки добавляется абзац (метод TypeParagraph объекта Selection). Далее происходит объявление переменной LT, которая будет содержать новый шаблон списка. Шаблон формируется с помощью метода Add объекта ListTemplate. Обратите внимание, что методу передается логический параметр true, который говорит, что мы хотим создать многоуровневый список в Word.
Далее происходит перебор все уровней списка (всего их может быть 9). Тут мы особого ничего не делаем, просто выбираем стиль (свойство NumberStyle объекта ListLevel) – тут значение 0, любое другое значение вызовет ошибку, так как многоуровневый список Word автоматически считается нумерованным, и никакой другой стиль не подходит (например, маркер).
После того, как мы создали собственный шаблон стиля, его нужно применить к выбранным абзацам, за это отвечает метод ApplyListTemplate объекта ListFormat, в качестве параметра мы передаем имя переменной, содержащей шаблон.
Далее происходит вызов процедуры LRange, в качестве параметров мы передаем два числа – номера абзацев, которые нужно выбрать. В самой процедуре происходит выбор заданного диапазона, и вызов метода ListIndent объекта ListFormat, который добавляет уровень к имеющемуся многоуровневому списку в Word.
В итоге, мы получим многоуровневый список Word состоящий из нескольких уровней.
Создание многоуровневого списка в Word

Хорошо, давайте рассмотрим следующие примеры.
Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Создание форматированого многоуровневого списка Word ' 2_spiski_v_word.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, oRange, oPars dim LT, REnd, x, i, LText set oWord = WScript.CreateObject("Word.Application") ' Класс Word set oDoc = oWord.Documents ' Коллекция Documents oDoc.Add() ' Создаем новый документ set oSel = oWord.Selection ' Объект Selection oWord.Visible = True ' Делаем документ видимым set oRange = oDoc(1).Range() ' Класс Range LText= "Многоуровневый список в word. " For i=0 to 20 oSel.TypeText LText & LText oSel.TypeParagraph Next set oPars = oRange.Paragraphs 'Коллекция Paragraps set LT = oDoc(1).ListTemplates.Add(true) ' Объект Template For x = 1 To 9 With LT.ListLevels(x) .NumberStyle = 0 .NumberPosition = oWord.InchesToPoints(0.25 * (x - 1)) .TextPosition = oWord.InchesToPoints(0.25 * x) select case x case 1 .NumberFormat = "%" & x & "." With .Font .Bold =true .Shadow = true End With case 2 .NumberFormat = "%1" & "." & "%" & x With .Font .Bold =true .ColorIndex = 2 End With case 3 .NumberFormat = "%1.%2." & "%" & x .Font.ColorIndex = 11 case else .NumberFormat = "* дополнительный пункт" end select End With Next REnd = oPars(oPars.Count).Range.End ' как в word создать список oRange.ListFormat.ApplyListTemplate LT call LRange(3,10):call LRange(12,17):call LRange(7,10):call LRange(14,17):call LRange(15,17) Sub LRange(a, b) With oRange .setRange 0, REnd .setRange oPars(a).Range.Start, oPars(b).Range.End .ListFormat.ListIndent End With End Sub |
Программный код на языке JSCRIPT:
// ---------------------------------------------------------------------------- // Создание простого многоуровневого списка Word // 2_spiski_v_word.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oRange1, oPars1; var LT, REnd, x, i, LText; oWord1 = WScript.CreateObject("Word.Application"); // Класс Word oDoc1 = oWord1.Documents; // Коллекция Documents oDoc1.Add(); // Создаем новый документ oSel1 = oWord1.Selection; // Объект Selection oWord1.Visible = true; // Делаем документ видимым oRange1 = oDoc1(1).Range(); //Класс Range LText= "Многоуровневый список в word. "; for(i=0; i<=20; i++){ oSel1.TypeText(LText + LText); oSel1.TypeParagraph(); } oPars1 = oRange1.Paragraphs; //Коллекция Paragraps LT = oDoc1(1).ListTemplates.Add(true); // Объект Template for(x=1; x<=9; x++){ with (LT.ListLevels(x)){ NumberStyle = 0; NumberPosition = oWord1.InchesToPoints(0.25 * (x - 1)); TextPosition = oWord1.InchesToPoints(0.25 * x); switch(x){ case 1: NumberFormat = "%" + x + "."; with(Font){ Bold =true; Shadow = true; } break; case 2: NumberFormat = "%1" + "." + "%" + x; with(Font){ Bold =true; ColorIndex = 2; } break; case 3: NumberFormat = "%1.%2." + "%" + x; Font.ColorIndex = 11; break; default: NumberFormat = "* дополнительный пункт"; } } } REnd = oPars1(oPars1.Count).Range.End; // как в word создать список oRange1.ListFormat.ApplyListTemplate(LT); LRange(3,10); LRange(12,17); LRange(7,10); LRange(14,17); LRange(15,17); function LRange(a, b){ with(oRange1){ setRange(0, REnd); setRange(oPars1(a).Range.Start, oPars1(b).Range.End); ListFormat.ListIndent(); } } |
В данном примере происходит добавление форматирования нумерации для списка. Используя подстановочный знак процента, мы сформировали многоуровневый список в Word такого формата:
- 1.
- ……
- 1.1.
- ……
- 1.1.1.
- ……
- * дополнительный пункт
Также, используя свойства объекта Font, мы задали форматирование текста для заданного пункта (цвет, жирный).
Как в Word создать список

И напоследок еще пара примеров.
Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Создание форматированого комбинированого многоуровневого списка в Word ' 3_spiski_v_word.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, oRange, oPars dim LT, REnd, x, i, LText set oWord = WScript.CreateObject("Word.Application") ' Класс Word set oDoc = oWord.Documents ' Коллекция Documents oDoc.Add() ' Создаем новый документ set oSel = oWord.Selection ' Объект Selection oWord.Visible = True ' Делаем документ видимым set oRange = oDoc(1).Range() ' Класс Range LText= "Многоуровневый список в word. " For i=0 to 20 oSel.TypeText LText & LText oSel.TypeParagraph Next set oPars = oRange.Paragraphs 'Коллекция Paragraps set LT = oDoc(1).ListTemplates.Add(true) ' Объект Template For x = 1 To 9 With LT.ListLevels(x) .NumberStyle = 0 .NumberPosition = oWord.InchesToPoints(0.25 * (x - 1)) .TextPosition = oWord.InchesToPoints(0.25 * x) select case x case 1 .NumberFormat = "%" & x & "." With .Font .Bold =true .Shadow = true End With case 2 .NumberFormat = "%" & x & " пункт" With .Font .Bold =true .ColorIndex = 2 End With case 3 .NumberFormat = "%-" .Font.ColorIndex = 11 case else .NumberFormat = "%*" end select End With Next REnd = oPars(oPars.Count).Range.End oRange.ListFormat.ApplyListTemplate LT call LRange(3,10):call LRange(8,10) oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(7), false, 2, 1 call LRange(15,18) oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(7), false, 2, 1 ' как в word создать список call LRange(17,18) oRange.ListFormat.ApplyListTemplateWithLevel oWord.ListGalleries(1).ListTemplates(6), false, 2, 1 Sub LRange(a, b) With oRange .SetRange 0, REnd .SetRange oPars(a).Range.Start, oPars(b).Range.End .ListFormat.ListIndent End With End Sub |
Программный код на языке JSCRIPT:
// ---------------------------------------------------------------------------- // Создание форматированого комбинированого многоуровневого списка в Word // 3_spiski_v_word.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oRange1, oPars1; var LT, REnd, x, i, LText; oWord1 = WScript.CreateObject("Word.Application"); // Объект Word oDoc1 = oWord1.Documents; // Коллекция Documents oDoc1.Add(); // Создаем новый документ oSel1 = oWord1.Selection; // Объект Selection oWord1.Visible = true; // Делаем документ видимым oRange1 = oDoc1(1).Range(); //Объект Range LText= "Многоуровневый список в word. "; for(i=0; i<=20; i++){ oSel1.TypeText(LText + LText); oSel1.TypeParagraph(); } oPars1 = oRange1.Paragraphs; //Коллекция Paragraps LT = oDoc1(1).ListTemplates.Add(true); // Объект Template for(x=1; x<=9; x++){ with (LT.ListLevels(x)){ NumberStyle = 0; NumberPosition = oWord1.InchesToPoints(0.25 * (x - 1)); TextPosition = oWord1.InchesToPoints(0.25 * x); switch(x){ case 1: NumberFormat = "%" + x + "."; with(Font){ Bold =true; Shadow = true; } break; case 2: NumberFormat = "%"+ x + " пункт"; with(Font){ Bold =true; ColorIndex = 2; } break; case 3: NumberFormat = "%-"; Font.ColorIndex = 11; break; default: NumberFormat = "%*"; } } } REnd = oPars1(oPars1.Count).Range.End; oRange1.ListFormat.ApplyListTemplate(LT); LRange(3,10); LRange(8,10); oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(7), false, 2, 1); // как в word создать список LRange(15,18); oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(7), false, 2, 1); LRange(17,18); oRange1.ListFormat.ApplyListTemplateWithLevel(oWord1.ListGalleries(1).ListTemplates(6), false, 2, 1); function LRange(a, b){ with(oRange1){ setRange(0, REnd); setRange(oPars1(a).Range.Start, oPars1(b).Range.End); ListFormat.ListIndent(); } } |
В этом последнем примере, мы сначала сформировали многоуровневый список в Word на основе созданного шаблона, а потом применили список «Маркер» к отдельным пунктам (метод ApplyListTemplateWithLevel). Обратите внимание, что параметры текста, определенные в нашем шаблоне автоматически были применены к маркированному списку.