Microsoft Office – одна из самых популярных программных систем, используемых во всем мире.
Трудно найти компьютер, на котором не был бы установлен текстовый редактор Word. Представляя собой систему приложений, тесно связанных друг с другом, MS Office открывает перед своими пользователями самый широкий спектр возможностей.
Мощнейшим средством создания приложений в MS Office стал язык Visual Basic for Application (VBA). Он пришел на смену языкам макропрограммирования, которые обычно включались в приложения.
VBA — высокоэффективное средство разработки приложений, поскольку принадлежит к объектно-ориентированным языкам программирования и обладает простотой макроязыков. Начинающие программировать в офисных пакетах пользователи могут записать свои действия с помощью макрорекордера и создавать макросы без изучения особенностей языка. Такая запись действий, а затем просмотр записанного кода являются простейшим способом для самостоятельного изучения VBA.
Сейчас с помощью VBA можно легко и быстро создавать различные приложения, используя единую для всех офисных программ среду и язык. Разработчикам приложений очень пригодятся дополнительные возможности и средства VBA для управления пользовательским интерфейсом, оперирования событиями, обработки ошибок и другие средства, которые позволят создавать эффективные приложения с дружеским интерфейсом.
Остановимся на вопросах разработки VBA-приложений для MS Word. С помощью VBA вы можете автоматизировать любые операции, выполняемые в Word интерактивно (то есть вручную): создание документов, добавление в них текста или других графических элементов, форматирование, редактирование, сохранение и т.д. VBA выполнит все эти операции быстрее, точнее и с меньшими затратами, чем человек.
В MS Word создается много документов типа справка, расписка, докладная записка и так далее. Эти документы имеют постоянную и переменную части. Создание таких документов можно упростить, используя язык программирования VBA.
Создание текстового документа
Рассмотрим пример создания справки в MS Word 2007.
Создадим документ Word и сохраним его с именем spravka.docx.
В случае отсутствия на ленте вкладки Разработчик создайте её с помощью команды - Параметры Word-Личная настройка. В группе Основные параметры работы с Word установите флажок в пункте Показать вкладку Разработчик на ленте.
Создать макрос1 с помощью макрорекордера. Макрос1 создает текст документа «СПРАВКА»:
- выполнить команду Разработка, Макрос, Запись макроса;
- в поле Имя макроса оставить Макрос1. В поле Макрос доступен для: выбрать имя данного документа spravka.docx. Нажать кнопку ОК;
- набрать текст документа «СПРАВКА» с нужными параметрами абзаца и шрифта;
- остановить запись макроса кнопкой Останов в закладке Код-Разработчик.
Проверить работу макроса запустив его на исполнение командой: Разработчик, Макросы, Макрос1, Выполнить.
Текст документа:
Создадим Макрос2 с помощью макрорекордера. Макрос2 выполняет очистку содержимого документа (Выделить все ${Ctrl+A}$, клавиша Delete).
Создадим панель быстрого доступа для spravka.docx с кнопками для запуска макросов.
Для этого необходимо:
- выбрать пункт меню Параметры Word-Настройка;
- в окне Настройка панели быстрого доступа и сочетаний клавиш на вкладке Выбрать команду из выбрать пункт Макросы, а на вкладке Настройка панели быстрого доступа выбрать пункт Для Spravka;
- в том же диалоговом окне команд Макросы выделить команду Макрос1 и добавить в панель быстрого доступа для документа Spravka. Аналогично добавить команду Макрос2;
- изменить надпись или значок на кнопке, назначенной макросу Изменить…, изменить кнопку и отображаемое имя (например, Справка), выбрать новый значок для кнопки, несколько изменить его и назначить макрос (Макрос1) этой кнопке;
- аналогично изменить надпись и кнопку для вызова еще одного макроса (Макрос2), например Очистка документа.
Выполнить макросы, используя кнопки панели быстрого доступа для Spravka.
Сохранить документ на диске в личной папке в файле с именем spravka.doc с типом файла «Документ Word с поддержкой макросов».
Для выхода из Word выберите из меню Выход из Word.
Использование VBA при решении задач в Word
VBA поддерживает набор объектов, соответствующих элементам Word. Используя свойства и методы этих объектов можно автоматизировать все операции в Word. Однако целесообразно автоматизировать выполнение тех операций, для реализации которых нет стандартных средств в Word или их выполнение стандартными средствами является трудоемкой или рутинной работой. Рассмотрим наиболее важные объекты.
Объект Document представляет собой новый или созданный ранее открытый документ.
Основными свойствами объекта Document являются:
- Count - количество открытых в данный момент документов;
- ActiveDocument - активный документ.
Некоторые методы объекта Document и коллекции Documents:
- Open - открывает файл, содержащий существующий документ и автоматически добавляет его в коллекцию;
- Add - добавляет новый пустой документ;
- Save - сохраняет изменения в существующем документе без закрытия;
- Save As (только для объекта) - сохраняет активный вновь созданный документ в текущей папке;
- Item - позволяет получить доступ к элементу коллекции;
- Activate (только для объекта) - активизирует открытый документ;
- PrintOut (только для объекта) - печать документа;
- Close - закрывает документ.
Объекты Character (символ), Word (слово), Sentence (предложение), Paragraph (абзац), Section (раздел документа) задают структуризацию текста документа.
Все эти объекты имеют свойства:
- Count - свойство возвращает количество элементов в коллекции;
- First - свойство возвращает объект, являющийся первым элементом коллекции;
- Last - свойство возвращает объект, являющийся последним элементом.
Коллекции Characters, Words, Sentences имеют единственный метод Item(Index).
Коллекция Paragraphs имеет все вышеперечисленные для данной группы коллекций свойства и множество свойств, значения которых определяют формат абзаца.
Формат абзаца может быть определен и с помощью методов. Приведем некоторые методы коллекции Paragraphs:
- Item - определяет элемент коллекции;
- Add - добавляет новый пустой абзац (параметр метода указывает точку вставки, задается объектом Range);
- InsertParagraph, InsertParagraphAfter, InsertParagraphBefore - осуществляют вставку пустого абзаца вместо текста или после, или перед текстом, задаваемым объектом Selection или Range;
- Reset - удаляет форматирование, сделанное вручную, применяя к абзацу формат, заданный стилем абзаца;
- Indent, Outdent - увеличивают, уменьшают отступ абзаца от края листа;
- TabHangingIndent(Count), TabIndent(Count) - увеличивают (Count>0), уменьшают (Count
- Space1, Space2, Space15 - устанавливают межстрочный интервал (одинарный, двойной, полуторный).
Объекты Range (диапазон) и Selection (выделение) представляют части документа.
Объект Range позволяет задать произвольный диапазон, представляющий собой последовательность индексированных элементов и может быть получен через метод Range или свойство Range других объектов.
Свойствами объекта Range являются:
- Start - начальная символьная позиция диапазона;
- End - конечная символьная позиция диапазона;
- Text - позволяет получить или изменить содержимое объекта.
Объект Selection задает выделенную в документе область (фрагмент). Выделенный в документе фрагмент задает непрерывную область элементов, но не является диапазоном, заданным своим началом и концом. Выделить можно только один фрагмент, поэтому один объект Selection может быть активен в данный момент времени, он может быть получен с помощью свойства Selection или метода Select других объектов.
Ниже приведены некоторые методы присущие объектам Selection и Range:
- Move - метод перемещения точки вставки;
- MoveStart, MoveEND - методы изменения значения свойств Start и End;
- Collapse - сворачивает диапазон к его началу или концу;
- Next - метод получения ссылки на очередной элемент коллекции объектов в диапазоне или выделенном фрагменте;
- Delete - удаляет текст, входящий в диапазон;
- InsertAfter , InsertBefore вставляет текст до или после текста, входящего в диапазон.
- Copy - копирует объект в буфер обмена;
- Cut - перемещает объект в буфер обмена;
- Paste - позволяет поместить содержимое буфера в область, заданную объектом Range или Selection.