ННГУ им. Н.И. Лобачевского МАКРОСЫ В MS OFFICE КУЗЕНКОВА Г.В. VISUAL BASIC FOR APPLICATION Основным средством разработки приложений в MS Office является комплексное решение на основе языка Visual Basic, а именно – Visual Basic for Application (VBA). Эта технология включает: • макрорекордер, • интерпретатор Visual Basic, • интегрированную среду разработки с встроенным отладчиком, • библиотеки времени выполнения (runtime library), 2 • библиотеки типов, представляющие объекты пакета. ОПРЕДЕЛЕНИЯ Термин макрос (macro) произошел от греческого слова, означающего расширенный или растянутый. 3 Макрос – это программа (в контексте офисного программирования - созданная автоматически), состоящая из списка команд, которые должны быть выполнены приложением. ВИДЫ МАКРОСОВ 1. Командные макросы. 2. Пользовательские функции. 4 3. Макрофункции. КОМАНДНЫЕ МАКРОСЫ Командные макросы – это наиболее распространенные макросы, обычно состоящие из операторов, эквивалентным тем или иным командам меню или параметрам диалоговых окон. 5 Назначение: выполнение действий, аналогичных командам меню – т.е. изменение окружения и основных объектов приложения. ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ Пользовательские функции – работают аналогично встроенным функциям приложения. 6 Отличие этих функций от командных макросов состоит в том, что они используют значения передаваемых им аргументов, производят некоторые вычисления и возвращают результат в точку вызова, но не изменяют среды приложения. МАКРОФУНКЦИИ Макрофункции – представляют собой сочетание командных макросов и пользовательских функций. Они могут использовать аргументы и возвращать результат, подобно пользовательским функциям, а также могут изменять среду приложения, как и командные макросы. 7 Чаще всего эти макросы вызываются из других макросов, и активно используются для модульного программирования. СПОСОБЫ РАЗРАБОТКИ МАКРОСА Различают 2 способа разработки макроса: • автоматическое создание, с использованием макрорекордера; • написание макроса «с нуля», используя язык программирования VBA. 8 Комбинированный подход: фрагменты будущей программы записываются автоматически, а затем они корректируются и дополняются «рукописным» кодом. МАКРОРЕКОРДЕР Макрорекордер (рекордер) – это средство записи действий пользователя с одновременным переводом их в программный код языка VBA. Макрорекордер – это встроенный инструмент, который фиксирует все действия пользователя, включая ошибки и неправильные запуски. 9 При выполнении макроса интерпретируется каждая записанная макрорекордером команда точно в такой последовательности, в которой пользователь выполнял их во время записи. МОДУЛИ Макросы, создаваемые макрорекордером MS Office, сохраняются в специальной части файла данных, называемой модулем. Модуль VBA содержит исходный код программы на языке VBA. В VBA существуют процедуры-подпрограммы Subprogram и процедуры-функции Function. Фактически макрос является подпрограммой VBA. 10 Записанный макрос имеет строго определенную структуру. РЕДАКТОР КОДА VBE 11 Visual Basic Editor (VBE) – это редактор Visual Basic, который представляет из себя компонент для создания, просмотра и редактирования как новых так и существующих модулей, содержащих программный код макросов и пользовательских форм. СИНТАКСИЧЕСКИЕ ПРИНЦИПЫ VBA 12 Основные синтаксические принципы этого языка: • VBA нечувствителен к регистру; • чтобы закомментировать код до конца строки, используется одинарная кавычка ( ') или команда REM; • символьные значения должны заключаться в двойные кавычки; • максимальная длина любого имени в VBA (переменные, константы, процедуры) — 255 символов; • начало нового оператора — перевод на новую строку; • ограничений на максимальную длину строки нет (хотя в редакторе умещается только 308 символов). • Несколько операторов в одной строке разделяются двоеточиями. СТРУКТУРА МАКРОСА В общем виде структуру кода макроса можно представить следующим образом: Sub имяМакроса () ' текст комментария Оператор1 Оператор2 ... ОператорN End Sub Каждый макрос VBA начинается с ключевого слова Sub, за которым следует имя макроса. 13 Строку, содержащую ключевое слово Sub и имя макроса, называют строкой объявления (declaration) макроса. СТРУКТУРА МАКРОСА Sub имяМакроса () ' текст комментария Оператор1 Оператор2 ... ОператорN End Sub За именем макроса всегда следуют пустые круглые скобки (т.к. макрос является процедурой VBA без параметров). Апостроф дает возможность добавить пояснения в любом месте вашей программы. Все, что расположено после него до символа перевода строки не воспринимается транслятором языка. 14 Строки комментариев. Комментарий (comment) – это строка в макросе VBA, которая не содержит инструкций, являющихся частью этого макроса. Каждая строка комментария начинается с символа апострофа ( ' ). ТЕЛО МАКРОСА (BODY) Каждая строка в теле макроса состоит из одного или более операторов VBA. Оператор VBA (statement) – это последовательность ключевых слов и других символов, которые вместе составляют одну полную инструкцию для VBA. Макрос VBA состоит из одного или нескольких операторов. 15 Завершает тело макроса ключевая строка: End Sub ПРАВИЛА ЗАПИСИ ОПЕРАТОРОВ • Каждый новый оператор записывается с новой строки. • Чтобы записать несколько операторов на одной строке, их разделяют между собой двоеточием (:). 16 • Если оператор не помещается в одной строке, то необходимо поставить в конце строки пробел и знак подчеркивания ( _), а затем продолжить не поместившуюся часть на следующей строке. • Объект – это программный элемент, который имеет свое отображение на экране. Он имеет некоторые переменные, определяющие его свойства. Есть некоторые методы для управления объектом (то, что с ним можно сделать). Синтаксис установки значения свойства объекта следующий: • Объект. Свойство = Выражение Синтаксис чтения свойств объекта следующий: • Переменная = Объект. Свойство Синтаксис применения методов к объекту: • Объект. Метод 17 ОБЪЕКТЫ, СВОЙСТВА И МЕТОДЫ VBA ПРИМЕР МАКРОСА Sub Hello() ' Макрос изменяет размер, начертание шрифта, выравнивание абзаца и ' выводит надпись в активный документ MS Word Selection.Font.Size = 24 Selection.Font.Bold = wdToggle Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter Selection.TypeText Text:="Hello, World!" End Sub 18 Пример 2 Sub tabdelete() 'убирает знак таб вначале абзаца Selection.WholeStory Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify 19 End Sub 20 КАК ЗАПИСАТЬ МАКРОС? ДИАЛОГОВОЕ ОКНО ЗАПИСИ МАКРОСА • Местом хранения может быть сам файл документа или глобальный шаблон Normal.dot Комментарии содержат имя макроса и текст, который был введен пользователем в текстовое поле «Описание» («Description») диалогового окна «Запись макроса» («Record Macro») в момент записи этого макроса. 21 • Лучше макросы хранить отдельными файлами (модулями). 22 ВСЕ МАКРОСЫ ЗАПИСАНЫ В ШАБЛОН ЕСТЬ ОСОБЕННОСТИ • При записи нового макроса допускается применение мыши только для выбора команд и параметров. • Для записи таких действий, как выделение текста, необходимо использовать клавиатуру. • Подробную информацию можно найти по адресу: http://office.microsoft.com/ru-ru/wordhelp/HA010096402.aspx?CTT=5&origin=HA010099 769 23 • Например, с помощью клавиши F8 можно выделить текст, а с помощью клавиши END — переместить курсор в конец строки. СОХРАНЕНИЕ МОДУЛЯ 24 • Одним из способов установки (сохранения) макросов на компьютере является копирование программного кода и его вставка с последующим сохранением в модуль проекта редактора Visual Basic. 25 КАК СОХРАНИТЬ МАКРОС В ОТДЕЛЬНОЙ ПАПКЕ? КАК ДОБАВИТЬ МАКРОС В ДОКУМЕНТ? ЕСЛИ МАКРОС НЕ РАБОТАЕТ? 2003: Сервис/Макрос/Безопасность 26 Выбрать средний уровень (или низкий) ОСНОВНЫЕ ОБЪЕКТЫ WORD • Ключевым в объектной модели Word является объект Application: 27 • элементы на разных уровнях иерархии - около 180 объектов (сам корневой объект Application имеет более сотни элементов: свойств, методов и событий). КЛАССЫ, ЗАДАЮЩИЕ СТРУКТУРИЗАЦИЮ ТЕКСТА ДОКУМЕНТА • Минимальной единицей текста является символ. Следующие единицы: слова, предложения, абзацы, а также более крупные образования: страницы, параграфы, главы. 28 • Классы Characters, Words, Statements, Paragraphs, Sections позволяют работать с последовательностями (коллекциями) символов, слов, предложений, абзацев и разделов. КЛАССА RANGE Элементом коллекций Characters, Words Statements является объект класса Range. и Объект Range позволяет работать как с одним элементом, так и с произвольной последовательностью элементов. Документы, поддокументы, абзацы, разделы – все они имеют метод или свойство Range, возвращающее интервал, связанный с объектом. 29 • Поэтому работа с текстом так или иначе ведется через методы и свойства объекта Range. ОБЪЕКТЫ SELECTION • При работе с текстом полезны следующие коды: определение цвета Selection.Font.Color = wdColorRed определение начертания Selection.Font.Bold = wdToggle wdColorDarkRed – бордовый wdColorDarkTeal – бирюзовый wdColorBlue – синий wdColorGreen – зеленый wdColorBlack – черный wdColorOrange – оранжевый Selection.Font.Italic= wdToggle определение выравнивания Selection.ParagraphFormat.Alignment= wdAlignParagraphCenter – выравнивание по центру wdAlignParagraphJustify – выравнивание по ширине 30 wdAlignParagraphRight – выравнивание по правому краю Вставка в текст конкретного предложения Selection.TypeText Text:="Пример работы с текстом" Вставка новой пустого абзаца Selection.TypeParagraph Установка размера символа 31 Selection.Font.Size = 14 With Selection.ParagraphFormat .LeftIndent = CentimetersToPoints(0) .RightIndent = CentimetersToPoints(0) .SpaceBefore = 18 .SpaceBeforeAuto = False .SpaceAfter = 18 .Alignment = wdAlignParagraphJustify 32 .FirstLineIndent = CentimetersToPoints(1.25) 33 Selection.Style = ActiveDocument.Styles("Çàãîëîâîê 1") With ActiveDocument.Styles("Çàãîëîâîê 1").Font .Name = "Arial" .Subscript = False .Size = 12 .Scaling = 100 .Bold = True .Kerning = 18 .Italic = False .Animation = wdAnimationNone .Underline = wdUnderlineNone .Ligatures = wdLigaturesNone .UnderlineColor = wdColorAutomatic .NumberSpacing = .StrikeThrough = False wdNumberSpacingDefault .DoubleStrikeThrough = False .NumberForm = .Outline = False wdNumberFormDefault .Emboss = False .StylisticSet = wdStylisticSetDefault .ContextualAlternates = 0 .Shadow = False End With .Hidden = False .SmallCaps = False .AllCaps = False .Color = wdColorAutomatic .Engrave = False .Superscript = False БОЛЕЕ ПОДРОБНО О ПРИМЕНЕНИИ ЯЗЫКА VBA http://library.fentu.ru/book/iriet/18/32___.html http://www.askit.ru/custom/vba_office/m3/03_01_vba_syntax_ basics.htm\ http://dpivi.ru/104-3-osnovnye-operatory-yazyka-vba.html http://dpivi.ru/96-2-osnovy-programmirovaniya-na-yazykevba.html 34 http://macros-vba.ru/articles/1-articles/62-kak-sohranit-kodmacrosa