Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
59
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Коллекция Sections

Свойство Sections, возвращающее коллекцию разделов, имеют объекты класса Documents, Selection, Range. Разделение документа на разделы позволяет придать документу подходящую структуру. Обычно раздел - довольно крупная единица текста в отличие от абзаца. Например, если документ представляет книгу, то каждый ее параграф или глава может быть выделена в отдельный раздел. При установке разделов вручную из меню Insert выбирается пункт Break, позволяющий закончить предыдущий раздел и начать новый. Раздел кончается специальным символом прерывания определенного типа. В зависимости от типа символа прерывания новый раздел может начинаться:

  • на той же странице;

  • на следующей странице;

  • на следующей четной странице;

  • на следующей нечетной странице.

Конечно, с разделом связывается не только последовательность символов, но и стиль форматирования, установки, принятые для его страниц, установки верхних и нижних колонтитулов и другие характеристики форматирования.

Вернемся к коллекции Sections. Она имеет свойства, уже известные нам по другим коллекциям. Поэтому мы их только перечислим:

Application, Count, Creator, Parent, First, Last.

Новым, ранее не упоминавшимся является свойство PageSetup. При обращении к нему возвращается объект класса PageSetup, свойства и методы которого позволяют установить характеристики страницы одновременно для всех разделов коллекции. Метод Item позволяет получить доступ к элементу коллекции. Метод Add позволяет добавить новый раздел в документ:

Add(Range, Start)

Возможный параметр Range указывает объект, перед которым будет вставлен символ прерывания, заканчивающий раздел. После символа прерывания будет начинаться новый раздел объектом Range. Если параметр Range опущен, символ прерывания вставляется в конец документа. Возможный параметр Start определяет тип символа прерывания раздела. Он может быть задан одной из констант:

wdSectionNewPage, wdSectionContinuous, wdSectionEvenPage, wdSectionOddPage, wdSectionNewColumn

Смысл, задаваемый этими константами, ранее уже был определен. В зависимости от их значения новый раздел будет начинаться со следующей страницы, на той же странице, на четной и нечетной странице. Последняя константа используется при работе с таблицами, позволяя по-разному форматировать каждый из ее столбцов. Если параметр Start опущен, новый раздел будет начинаться со следующей страницы.

Для удаления раздела из коллекции может быть использован метод Delete объектов Selection и Range.

Взгляните на пример работы с текстом документа, в котором создаются новые разделы и добавляются абзацы:

Public Sub WorkWithSecAndPar()

'Работа с разделами и абзацами

'Добавление новой книги

Documents.Add

Documents(1).Activate

With ActiveDocument

'Вставка двух разделов в документ

'Раздел начнется с нечетной страницы

.Sections.Add Start:=wdSectionOddPage

.Sections.Add

'Вставка абзаца во второй раздел

.Sections(2).Range.Paragraphs.Add

.Sections(2).PageSetup.LeftMargin = 3

.Sections(2).Range.Style = "Heading 1"

.Sections(2).Range.Font.Name = "Arial"

.Sections(2).Range.Paragraphs(1).Range.InsertBefore ("Лекция 1")

'Вставка нового раздела и абзаца

.Sections.Add Start:=wdSectionNewPage

.Sections.Last.Range.Paragraphs.Last.Range.InsertBefore ("Параграф 1")

.Sections.Last.Range.Paragraphs.Add

'Вставка нового раздела и абзаца

.Sections.Add Start:=wdSectionNewPage

.Sections.Last.Range.Paragraphs.Last.Range.InsertBefore ("Параграф 2")

.Sections.Last.Range.Paragraphs.Add

'Вставка нового раздела в конец документа

'Раздел начнется с нечетной страницы

.Sections.Add Start:=wdSectionOddPage

.Sections.Last.PageSetup.LeftMargin = 23

.Sections.Last.Range.Font.Name = "TimesNewRoman"

'Вставка абзаца

.Sections.Last.Range.Paragraphs(1).Range.InsertBefore ("Лекция 2")

.Sections.Last.Range.Paragraphs.Add

Debug.Print "Число разделов документа =", .Sections.Count

Debug.Print "Число абзацев документа =", .Paragraphs.Count

'Удаление раздела выполняет метод объекта Range

.Sections(1).Range.Delete

Debug.Print "Число разделов документа =", .Sections.Count

End With

End Sub

Пример 1.6. (html, txt)

Мы не будем подробно комментировать работу этой процедуры, так как все применяемые методы и свойства уже были описаны. На всякий случай подробно разберем выполнение одной строки этой процедуры:

Sections.Last.Range.Paragraphs(1).Range.InsertBefore ("Лекция 2")

  • Свойство Sections активного документа возвращает объект Sections, задающий коллекцию разделов этого документа.

  • Свойство Last объекта возвращает объект Section, задающий последний раздел в этой коллекции.

  • Свойство Range возвращает объект Range, связанный с данным разделом. Теперь становятся доступны методы и свойства объекта, в частности свойство Paragraphs, которым объект Section не обладает.

  • Вызов Paragraphs(1) возвращает объект класса Paragraph, задающий первый абзац из коллекции абзацев данного раздела. Заметьте: опущен метод по умолчанию Item, так что запись Paragraphs(1) является краткой формой записи Paragraphs. Item (1)

  • И снова мы получаем объект Range, теперь уже связанный с абзацем.

  • На последнем шаге вызывается метод InsertBefore объекта Range, позволяющий добавить в начало абзаца текст, заданный аргументом метода. В нашем случае - лекция 2.