Глава 2. Не пишите программу, когда можно записать макрос.
В этой главе ...
~ Запись макросов - последовательностей команд, чтобы пользоваться ими снова и снова
~ Запуск средства записи макросов
~ Тонкости записи макросов: они должны работать так, как вы планировали
~ Просмотр и редактирование программного кода макроса в редакторе Visual Basic
Зачем мучиться с набором программного кода, если в этом нет необходимости? Если все, что вам нужно, - это автоматизировать выполнение некоторой последовательности команд вашего приложения, запишите их в виде макроса. Прочтите эту главу, чтобы узнать, как с помощью записи макросов минимизировать объем программного кода, который придется набирать вручную.
Как работают макросы
Некоторые VBA-приложения- среди них Microsoft Word, Excel и PowerPoint- имеют средство записи макросов, работа которого напоминает работу обычного магнитофона. После включения средства записи макросов оно будет записывать все команды, которые вы используете в приложении, до тех пор, пока не щелкнете на кнопке Остановить запись. После того как макрос записан, вы сможете воспроизводить его каждый раз, когда вам потребуется записанная в нем последовательность команд.
Кстати, слово макрос означает большой. Подразумевается, что вы объединяете множество небольших команд в одну большую, На самом же деле, ваш макрос может быть таким маленьким и скромным, каким вы пожелаете, - если у вас слишком много времени, можете создать себе целый ряд бесполезных макросов, включающих всего по одной команде.
В VBA-приложениях, не имеющих средства записи макросов, термин макрос может означать любую созданную вами VBA-программу. Например, в Visio версий 4.5 и 5 указание создать макрос открывает окно создания новой программы в редакторе Visual Basic. С другой стороны, как минимум в одном из основных VBA приложений - в Access - макрос вообще напрямую никак не связывается с VBA.
В Access, хотя и можно создавать макросы, содержащие последовательности команд, они не сохраняются в виде VBA-кода автоматически (подробности вы найдете ниже во врезке Макросы - не росы). Средство записи макросов отсутствует во всех версиях Access - там есть специальное окно для выбора команд, которые вы собираетесь поместить в макрос.
Макрос- это просто еще одно название для VBA-программы. Средство записи макросов во время своей работы конвертирует каждую из используемых вами команд в соответствующие строки программного кода VBA. Законченный макрос сохраняется как процедура VBA. Процедуры, как разъясняется Б главе 6, - это отдельные единицы программного кода VBA, которые можно вызвать по имени для выполнения. (Если уж говорить совсем строго, то макрос представляет собой процедуру типа Sub, не имеющую аргументов. Вам нужна именно такая строгость?)
Еще один теоретический момент: макросы есть и в Access, и в VBA, но в Access они не являются VBA программами. Макросы в Access создаются с помощью последовательности команд в специально предлагаемом для этого диалоговом окне, Боюсь еще больше запутать дело, но я должен тут добавить, что макрос в Access может вызывать VBA-процедуру Access. Вот так-то.
Когда следует записывать макрос
Макросы экономят время и снимают раздражение. Это действительно так. Компьютер воспроизведет последовательность команд куда быстрее, чем это сделаете вы, щелкая на соответствующих кнопках команд и выбирая пункты соответствующих меню. При этом компьютер не допустит ни единой ошибки. И ваше настроение, несомненно, улучшится, поскольку люди обычно не любят повторять одно и то же больше двух-трех раз подряд.
Поэтому проверьте, не приходится ли вам снова и снова повторять в приложении одни и те же последовательности команд. Как только вы обнаружите, что такие последовательности у вас есть, сразу же запишите их виде макроса. А еще лучше, если вы знаете наперед, что какую-то новую последовательность команд вам придется использоваться и в дальнейшем, запишите соответствующий ей макрос уже при первом случае ее применения. И уже со следующего раза используйте макрос.
Макрос - и вещь хорошая, и развитие стимулирует
Макросы очень полезны для своего прямого назначения, но не менее полезны они для использования программного кода записанного макроса как примера для начала освоения программирования в VBA. После того как вы запишете несколько макросов, вы наверняка загоритесь желанием как-нибудь их улучшить и сделать более гибкими. В результате совсем небольших усилий с помощью VBA вы можете добавить своим макросам немного интеллекта и заставить их выполнять различные действия в зависимости от ситуации. Это будет обсуждаться ниже, в разделе Редактирование макросов как способ создания программного кода.
Планирование макросов
Прежде чем вы пропустите этот тоскливый раздел и с головой погрузитесь в процесс записи макросов, выслушайте один довольно консервативный совет: чтобы избежать лишней головной боли, уделите немного времени планированию макроса перед тем, как записывать его.
Можно, конечно, запустить средство записи макросов и начать громоздить одну за другой команды сразу, как только в голове появится хотя бы смутное представление о том, что должен делать ваш новый макрос. Вот только средство записи макросов очень добросовестно запишет буквально каждую из вызываемых вами команд, в том числе и все допущенные вами ошибки. А в восьми или девяти случаях из десяти такие ошибки у вас будут.
Ясно, что можно удалить неудавшийся макрос и начать все сначала. Но можно и избавить себя от таких проблем, если потратить немного времени на планирование макроса.
Продумайте те шаги, которые должен выполнять макрос, предварительно попробуйте их, чтобы убедиться, что результат будет соответствовать запланированному, и только затем записывайте макрос.
При планировании макроса учитывайте все специальные условия, необходимые для его правильной работы. Процесс записи должен включать и добавление в макрос команд, нужных для воссоздания этих необходимых условий.
Представьте, например, что вы работаете в Microsoft Word. Скажем, требуется, чтобы макрос вставлял текущую дату в начало каждого документа. Можно, конечно, предположить, что текстовый курсор при этом уже находится в самом начале документа. Но не следует быть столь самоуверенным. Даже если курсор находится в нужном месте, когда вы начинаете записывать макрос, все равно первой записываемой командой должна быть команда перемещения курсора в начало документа. Только тогда макрос будет работать правильно, независимо от того, где окажется текстовый курсор.
Запись макросов
К счастью, записывать макросы так же просто, как ложиться в постель. Тем более, что я собираюсь разложить здесь вам все по полочкам.
Запуск средства записи макросов
Запустить средство записи макросов можно одним из следующих способов.
* Выбрать из меню Сервис=Макрос=Начать запись. В последних версиях Office меню Макрос может не появляться до тех пор, пока вы не щелкнете на кнопке с направленной вниз стрелкой внизу в меню Сервис.
* В панели инструментов щелкнуть на кнопке Начать запись макроса, если у вашего t; приложения таковая есть. Например, в Microsoft Office кнопка Начать запись макроса расположена в панели инструментов Visual Basic.
В результате любого из этих действий появится диалоговое окно Запись макроса.