Создание макросов

Макрос  —  это  набор  инструкций,  задающих  последовательность  действий,  которые Microsoft  Excel  (или  другое  приложение)  выполняет  вместо  вас.  Макросы,  по  сути, являются компьютерными программами, но они работают не независимо, а только внутри Excel. Их область применения —. автоматизация трудоемких или типовых задач.

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

Существует два способа создания макросов: автоматическая запись  последовательности операций или непосредственный ввод инструкций в  программный модуль. В последнем случае  требуется  немного  знать   язык  программирования  Microsoft  Visual  Basic  for Applications (VBA).

В данной главе мы покажем, как записать простой макрос, и заодно  познакомим вас с VBA. Затем мы объясним, как вывести на экран текст записанного макроса и сделать его более полезным, внеся в него несколько простых изменений. В главе 32 вы узнаете, как использовать  VBA для создания собственных функций. В главе 33 будет  рассмотрена техника отладки создаваемых макросов и пользовательских функций.

Запись макроса

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

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

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

Рассмотрим описанное выше на примере создания простого макроса, который вставляет в рабочий лист название и адрес фирмы. Начните с сохранения и закрытия всех открытых книг и затем создайте новую книгу. После этого сделайте следующее:

1.  Выберите в меню Сервис (Tools) команду Макрос (Macro) и затем — Начать запись (Record  New  Macro).  Excel  выведет  на  экран  диалоговое  окно  Запись  макроса (Record Macro), показанное на рис. 31.1.

Рис. 31.1. Откройте диалоговое окно Запись макроса, чтобы начать запись макроса

2.   Назначьте имя макросу. Вы можете принять предложенное Excel  имя  Макрос1 или ввести любое другое, в данном случае введите Адрес_Компании.

3.   Свяжите макрос с комбинацией клавиш, введя в поле Сочетание  клавиш (Shortcut Key) букву, в нашем примере прописную А.

4.   Чтобы сохранить макрос в текущей книге, убедитесь, что в  раскрывающемся списке

Сохранить в (Store Marco In) выбран пункт Эта книга (This Workbook).

5.   Введите краткий комментарий к макросу в поле Описание  (Description). Сохраните предложенный  стандартный  текст  (он  поможет  вам  ориентироваться  в  дальнейшем среди множества макросов) и дополните его словами Ввод адреса фирмы.

6.   Для того чтобы начать запись, нажмите кнопку ОК. Excel выведет в строке состояния сообщение Запись (Recording), и на экране появится панель инструментов Остановка записи (Stop Recording) (рис. 31.2).

Рис. 31.7. Объект Range и несколько его методов и свойств

Конкретный экземпляр листа, третий в семействе, указывается следующим образом:

Sheets(3)

Третий лист с именем Итоги допустимо идентифицировать как

Sheets("MTorn")

В  VBA  каждый  элемент  семейства  имеет  собственный  индекс,  но  интервал  значений индексов не обязательно непрерывен, и поэтому при удалении одного экземпляра объекта индексы других экземпляров могут остаться прежними. Так, если вы удалите Sheets(3) из семейства двенадцати листов книги, нет гарантии, что Excel перенумерует Sheets(4) и т. д. до Sheets(12), чтобы устранить разрыв.

Для  многократного  повторения  операции  часто  применяется  конструкция  For… Next,

например, последовательно активировать листы книги позволяет такой цикл:

For n 1 to 12     ‘Активизация каждого листа

Sheets(n).Activate Next n

Но если вы выполните этот код после удаления листа Sheets(3), VBA выведет сообщение об ошибке и остановит макрос, поскольку объекта Sheets(3) больше не существует. Для таких  ситуаций  VBA  предлагает   конструкцию  For  Each…Next,  которая  позволяет перебирать  экземпляры семейства без учета их индексов. Предположим, что мы  хотим дополнительно

пометить каждый лист активной книги, вводя в ячейку А1 значения Лист1, Лист2 и т. д. Так как в общем случае количество листов в книге  заранее не известно, воспользуемся следующим макросом VBA:

Sub EnterSheetNum() n = 0

For Each Sheet In Sheets( ) n = n + 1

Sheet.Activate Range("A1") .Select ActiveCell.FormulaR1C1 = "Лист" + Str(n)

Next End Sub

Изменение свойств объекта без его выделения

В приведенном ранее макросе каждый из листов сначала активируется,  затем на нем выделяется ячейка А1, и после этого устанавливается свойство FormulaRlCl этой ячейки. В VBA, как правило, первые два из  перечисленных действий являются избыточными и лишь увеличивают время выполнения макроса. Другими словами, последовательность из трех инструкций

Sheet.Activate Range("A1") .Select ActiveCell.FormulaR1C1 = "Лист" + Str(n)

можно заменить одной

Sheet.Range(“A1").FormulaR1C1  =   "Sheet"  + Str(n)

Основное преимущество нашей модификации заключается в том, что новый макрос будет выполняться быстрее, поскольку он не заставляет  Excel активизировать каждый лист и ячейку перед вводом текста, обращаясь к ним напрямую.

Имена аргументов метода

В VBA многие методы имеют аргументы, позволяющие задать параметры выполняемых действий.  Если  мы  хотим  заставить  нашего  киберпса  вилять  хвостом  (объект  Tail)  с помощью  метода  Wag,  то  потребуются  такие  свойства,  как  wagRate —  количество взмахов в секунду, wagTime — продолжительность одного взмаха в секундах и wagArc

—  размах в градусах. Их можно задать в двух вариантах синтаксиса.

В  первом  варианте,  который  часто  называется  синтаксисом  по   имени,  аргументы указываются  по  имени  и  в  произвольном  порядке.  Например,  следующая  инструкция жестоко принуждает Тузика  подрагивать хвостом три раза в секунду в течение часа с амплитудой 5°:

Robodogs("Тузик").Tail.Wag _ wagRate:=  3,_

wagTime:=  3600,_ wagArc:=  5

Для   присваивания   значения   аргументу   используется   двоеточие   и   знак   равенства,

аргументы отделяются друг от друга запятой.

ПРИМЕЧАНИЕ  

Подчеркивание в конце строки указывает VBA, что следующая строка  является продолжением той же инструкции. Использование этого  символа облегчает чтение программы и позволяет добавлять комментарии к конкретным аргументам. Перед подчеркиванием всегда должен находиться пробел.

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

Robodogs("Tyзик").Tail.Wag(3,3600,5)

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

ПРИМЕЧАНИЕ

При записи макросов Excel перечисляет аргументы по позиции, а не по  имени. Поэтому записанные макросы труднее понять, чем созданные вручную, в которых аргументы заданы по имени. И еще: когда вы выделяете зарезервированное имя аргумента VBA и нажимаете клавишу F1, Excel выводит тему справки, предоставляющую контекстную информацию, как для любого ключевого слова. Согласитесь, что это удобно.

Источник: Эффективная работа: Microsoft Office Excel 2003 / М. Додж, К. Стинсон — СПб.: Питер, 2005. — 1088 с: ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий