Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно | ВУЗ: Институт управления, бизнеса и права
Лекция 11:

Редактирование документов, автоматически выполняемые макросы

< Лекция 10 || Лекция 11: 12 || Лекция 12 >

11.5. Объект Range

Объект Range имеет некоторые преимущества перед объектом Selection. В частности, при работе с Range нет необходимости выделять текст или перемещать по тексту курсор.

В документе может быть сколько угодно объектов Range, в то время, как объект Selection может быть лишь один. Объект Range задается первым и последним символом.

Особенность работы с Range заключается в том, что этот объект может быть создан лишь программно. Получить Range для различных частей документа можно разными способами.

11.5.1. Как получить объект Range

Можно преобразовать в Range выделение и больше не зависеть от действий пользователя — с помощью свойства Range объекта Selection. В "Основы VBA: встроенные и пользовательские функции" мы рассматривали пример такого перехода.

Объект Range, в свою очередь, может быть преобразован в выделение — с помощью метода Select. Поэтому мы можем легко переходить от объектов Range к объектам Selection и наоборот.

Можно задать Range напрямую — указав диапазон. Например, следующий код позволяет получить диапазон активного документа от 10 до 1500-го символа (листинг 11.6.)

Dim obj_Range As Range
    Set obj_Range = _
    ActiveDocument.Range(10, 1500)
Листинг 11.6. Задаем объект Range напрямую

Минус этого метода очевиден: чтобы программно работать с определенным участком документа, нужно знать его "координаты" — даже если предварительно вычислить их, любое изменение документа вызовет необходимость пересчета.

Можно получить Range для любого объекта документа, обратившись к соответствующему свойству объекта типа Character, Word и т.д. Например, следующий код (листинг 11.7.) записывает в объектную переменную ссылку на Range для 5-го слова активного документа.

Dim obj_Range As Range
        Set obj_Range = _
        ActiveDocument.Words(5).Range
Листинг 11.7. Получаем объект Range из объекта Word (слово)

Очень часто используется разновидность этого метода, связанная со свойством Range объекта Bookmark — закладки. На практике это — один из самых удобных способов автоматического создания документов на основе шаблонов. Ниже мы подробнее поговорим об использовании закладок.

11.5.2. Свойства и методы объекта Range

Если вы ориентируетесь в методах и свойствах объекта Selection — это значит, что вы сможете работать и с Range. Между этими объектами очень много общего. Здесь мы отметим лишь уже упомянутый метод Select объекта Range — он позволяет выделить диапазон, соответствующий ему, а так же свойство Text, которое предназначено для модификации текста, который содержится в Range. Практику работы с Range мы рассмотрим в следующем разделе, когда будем говорить о закладках.

11.6. Коллекция Bookmarks, шаблоны

11-02-Закладки и шаблоны.dotm — пример к п. 11.6.

Коллекция Bookmarks содержит закладки. Эта коллекция может использоваться совместно с объектами Document, Selection и Range. Причем, когда речь идет о коллекции Document.Bookmarks, мы можем работать с закладками в масштабах всего документа, коллекция Selection.Bookmarks содержит закладки в пределах выделения, а Range.Bookmarks — в пределах диапазона.

Закладки, добавленные в документы, хранятся там постоянно. Объекты Bookmarks имеют очень мало свойств и методов. Главная задача закладки — это точно указать место в документе, а все остальное — это уже забота либо объектов Selection, либо — Range. Для получения объекта Range из закладки достаточно воспользоваться ее свойством Range.

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

  • Вручную создать шаблон, содержащий постоянные части и переменные части, выделяемые закладками.
  • Создать новый документ, используя шаблон
  • Заполнить новый документ данными, используя закладки

Давайте рассмотрим пример, который иллюстрирует вышеописанные шаги. Мы будем создавать шаблон приглашения с несколькими переменными частями.

11.6.1. Закладки и шаблон

Чтобы создать шаблон, создадим для начала новый документ. После этого наберем и отформатируем в документе текст приглашения: "Уважаем ый Александр Александрович! Приглашаем вас на собрание, которое состоится 17.05.08. Администрация" (рис. 11.1.).

Подготовка текста шаблона

Рис. 11.1. Подготовка текста шаблона

В этом тексте выделены места, которые могут меняться. Давайте создадим таблицу, содержащую информацию об этих местах документа (табл. 11.1.).

Таблица 11.1. Изменяемые части документа и закладки
Изменяемый элемент Описание Имя и номер закладки
ый Окончание, определяющее лицо или лица, которым адресовано послание. Возможные варианты: "ый" - для мужчины, "ая" - для женщины, "ые" - для группы лиц bm_Peoples, №1
Александр Александрович Имя приглашенного bm_Name, №2
17.05.08 Дата bm_Date, №3

Чтобы назначить элементу документа закладку, нужно выделить этот элемент (например, слово или часть слова), после чего перейти на вкладку Вставка, нажать там кнопку Связи и в появившемся меню выбрать пункт Закладки. Появится окно, в котором нужно задать имя закладки и нажать на кнопку Добавить для добавления закладки в документ (рис. 11.2.).

Добавление закладки в документ

увеличить изображение
Рис. 11.2. Добавление закладки в документ

После того, как закладки добавлены, оснастим наш шаблон средствами для автоматического редактирования новых документов, созданных на его основе. Текст программы мы поместим в обработчик события New шаблона.

В нашем случае это должен код (листинг 11.8.), который запрашивает данные у пользователя. При необходимости можно видоизменить программу таким образом, чтобы она брала данные из специально подготовленного файла, из базы данных, можно создать форму для ввода всех значений по каждому из пользователей и, запустив ее, создать необходимое количество документов, используя шаблон и т.д.

Private Sub Document_New()
    Dim obj_NewDoc As Document
    Dim obj_Range As Range
    Set obj_NewDoc = Application.Documents.Item(1)
    Set obj_Range = _
    obj_NewDoc.Bookmarks("bm_Peoples").Range
    obj_Range.Text = _
    InputBox("Введите окончание обращения: -ый, -ая, -ые")
    Set obj_Range = _
    obj_NewDoc.Bookmarks("bm_Name").Range
    obj_Range.Text = _
    InputBox("Введите имена приглашенных")
    Set obj_Range = _
    obj_NewDoc.Bookmarks("bm_Date").Range
    obj_Range.Text = _
    InputBox("Введите дату собрания")
End Sub
Листинг 11.8. Код для автоматического формирования нового документа на основе шаблона

Сначала мы объявляем пару объектных переменных. Одну — для документа, с которым будем работать, другую — для диапазона документа, который будем выбирать с помощью закладки и после этого редактировать.

В первую очередь получаем ссылку на созданный документ. Он будет первым в коллекции Application.Documents.

Далее — записываем в объектную переменную obj_Range диапазон, которому соответствует закладка с именем bm_Peoples — то есть та самая, которая должна хранить окончание обращения.

Следующий шаг — воспользоваться свойством Text объекта Range и предложить пользователю ввести окончание для обращения.

Далее процесс повторяется — ссылка на диапазон очередной закладки записывается в переменную, после чего этот диапазон модифицируется путем ввода данных.

Здесь мы рассмотрели лишь общую схему работы с закладками. На практике неудобно будет вводить большое количество информации в окна запросов. Поэтому данный пример можно развивать в нескольких направлениях.

  1. Создать форму с текстовыми полями для ввода данных. После ввода достаточно нажать на кнопку, чтобы на основе шаблона был сформирован новый документ, который можно сохранить на диске.
  2. Создать отдельный документ MS Word, в котором будут перечислены изменяемые части документа. Например, если рассмотреть обычное приглашение на какое-то мероприятие, в изменяемую часть приглашения входит лишь обращение к приглашаемым. Это значит, что в документ, создаваемый вручную, можно включить список имен и фамилий приглашенных с обращениями к ним, после чего создать шаблон и написать макрос, который автоматически подставит данные из списка в документы, созданные по шаблону. Этот метод удобен при работе с небольшими (до нескольких сотен) списками и может быть реализован стандартными средствами слияния документов MS Word.
  3. Использовать в качестве источника информации базу данных или документ другого типа. Например, можно воспользоваться базой данных MS Access или документом MS Excel, содержащим список приглашенных. О работе с базами данных и документами MS Excel мы поговорим ниже.

11.7. Автоматически запускаемые макросы

11-03-Автоматические макросы.docm — пример к п. 11.7.

Работая с макросами Microsoft Word, следует знать о том, что существует несколько имен, зарезервированных для макросов, которые могут выполняться автоматически. Имена и события, при возникновении которых запускаются эти макросы, приведены в табл. 11.2.

Таблица 11.2. Автоматически выполняемые макросы
Имя макроса Условия выполнения
AutoExec Старт Microsoft Word или загрузка глобального шаблона. Этот макрос будет работать лишь из Normal.dotm
AutoNew Создание нового документа
AutoOpen Открытие существующего документа
AutoClose Закрытие документа
AutoExit Выход из Microsoft Word или выгрузка глобального шаблона

Давайте добавим к документу макрос AutoClose — он будет выполняться каждый раз при закрытии документа. Для этого с помощью панели Вид откроем окно Макрос, в поле ввода имени макроса введем AutoClose и нажмем на кнопку Создать. Появится окно редактора Visual Basic, содержащее новый модуль с макросом, имеющим имя AutoClose. Добавим в код макроса вызов окна сообщения, выводящего надпись "До свидания!". Ведь макрос AutoClose будет выполняться при выходе из документа, логично будет попрощаться с пользователем после того, как тот нажал на кнопку закрытия документа.

Вы могли заметить, что эти макросы очень похожи на события объекта Document — их можно использовать в различных целях, когда нужна предварительная подготовка документа после его создания или проведение каких-либо работ сразу перед закрытием. Будучи добавленными в Normal.dotm, такие макросы могут послужить целям автоматизации работы в MS Office.

11.8. Выводы

В этой лекции мы познакомились с приемами автоматического редактирования и создания документов MS Word с использованием объектов Range и Selection. Так же мы рассмотрели пример автоматического создания документа на основе шаблона и работу с автоматически запускаемыми макросами. В следующей лекции вы найдете несколько примеров программирования в MS Word на VBA.

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Евгений Ушаков
Евгений Ушаков

Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно?

Александр Новиков
Александр Новиков

Добрый день! Очень нужен справочник по объектам VBA c описание их методов и свойств.

Кто-нибудь знает, где можно приобрести?

(Он конечно есть в VBA - Object browser, но не очень удобный)