Стив Каммингс - VBA для чайников
Представьте, например, что вы работаете в Microsoft Word. Скажем, требуется, чтобы макрос вставлял текущую дату в начало каждого документа. Можно, конечно, предположить, что текстовый курсор при этом уже находится в самом начале документа. Но не следует быть столь самоуверенным. Даже если курсор находится в нужном месте, когда вы начинаете записывать макрос, все равно первой записываемой командой должна быть команда перемещения курсора в начало документа. Только тогда макрос будет работать правильно, независимо от того, где окажется текстовый курсор.
Запись макросов
К счастью, записывать макросы так же просто, как ложиться в постель. Тем более, что я собираюсь разложить здесь вам все по полочкам.
Запуск средства записи макросов
Запустить средство записи макросов можно одним из следующих способов.
* Выбрать из меню Сервис=Макрос=Начать запись. В последних версиях Office меню Макрос может не появляться до тех пор, пока вы не щелкнете на кнопке с направленной вниз стрелкой внизу в меню Сервис.
* В панели инструментов щелкнуть на кнопке Начать запись макроса, если у вашего t; приложения таковая есть. Например, в Microsoft Office кнопка Начать запись макроса расположена в панели инструментов Visual Basic.
В результате любого из этих действий появится диалоговое окно Запись макроса.
На рис. 2.1 показано диалоговое окно Запись макроса из Microsoft Excel (это окно в разных приложениях выглядит по-разному).
Как выбрать имя для малютки
Стараясь быть полезным, диалоговое окно Запись макроса предложит самое оригинальное из подходящих имен для вашего нового макроса- Макрос1 (или Макрос2, или МакросЗ). Вежливо поблагодарив, быстренько удалите предлагаемое имя и впечатайте вместо него нечто более вам подходящее.
Рис. 2.1. Диалоговое окно Запись макроса в Excel
Имена макросов должны, конечно, ассоциироваться с выполняемыми ими задачами.
Однако при этом следует придерживаться определенных правил. Ну-ка, повторяйте все хором за мной.
* Имя макроса должно начинаться с буквы, а не с цифры. А вот после первой буквы уже могут идти и цифры.
* Имя макроса не должно содержать пробелов. Для выделения начала слов в имени макроса следует использовать прописные буквы, например, как здесь:
ОчисткаВсегоЖесткогоДиска
* Знаки пунктуации тоже не допускаются. Здесь есть исключения, но вполне разумно в именах макросов знаки пунктуации не использовать вообще. Если в именах присутствуют знаки пунктуации. VBA выводит сообщение Invalid procedure name (Недопустимое имя процедуры).
Детальное обсуждение правил выбора имен в VBA приводится в главе 6.
Другие опции диалогового окна Запись макроса
В зависимости от приложения, диалоговое окно Запись макроса может содержать различные опции. Вот несколько примеров.
* Возможно, там будет место для ввода более подробного описания макроса.
* Возможно, у вас будут варианты при определении места хранения макроса. Как правило, предлагается хранить его либо в самом документе, либо в шаблоне документа.
* Возможно, вам предложат приписать макрос кнопке в панели инструментов либо назначить ему комбинацию клавиш. Если ваше приложение предусматривает такую опцию, используйте ее без сомнений! Подробности вы найдете в следующем разделе.
Кнопка, кнопка, ты чья?
Некоторые VBA-приложения позволяют приписать новый макрос кнопке в панели инструментов либо назначить ему комбинацию клавиш еще до начала записи этого макроса.
Воспользуйтесь такой возможностью, ведь использовать кнопку или клавиатуру для вызова макроса удобнее всего.
Если приложение позволяет такой трюк, вы увидите в диалоговом окне Запись макроса соответствующее поле. Так, в Excel в диалоговом окне Запись макроса есть поле Сочетание клавиш, где вы можете указать комбинацию клавиш (например, CtrI+M), которая должна будет запускать макрос (см. рис. 2.1). В Word диалоговое окно Запись макроса содержит кнопки, которые позволят вам либо приписать макрос кнопке в панели инструментов, либо назначить ему комбинацию клавиш (рис. 2.2). Щелкнув на одной из этих кнопок, вы тем самым откроете новое диалоговое окно, в котором и должны будете сделать соответствующие назначения.
Когда вы назначаете комбинацию клавиш новому макросу, не поленитесь сразу же где-нибудь эту комбинацию записать. На время, пока эта новая комбинацию клавиш запомнится, держите напоминание о ней на своем рабочем столе или на экране компьютера.
Рис. 2.2. Диалоговое окно Запись макроса в Word
Начало записи
Командой для начала записи макроса будет щелчок на кнопке ОК в диалоговом окне Запись макроса. О том, что запись началась, вы узнаете по появившейся с этого момента панели инструментов Остановить запись (рис. 2.3). Изменится также и указатель мыши, превратившись в небольшое изображение магнитофонной компакт-кассеты.
Рис. 2.3. Панель инструментов Остановить запись
Запись команд
После начала записи вам не придется предпринимать никаких специальных действий, чтобы записать нужные вам команды в макрос. Нужно просто использовать команды приложения самым обычным способом. Все, что вы будете делать,- и выбор команд из меню, и форматирование изображений, и печатание текста- будет сохранено в макросе.
Ах, да! Все допущенные во время записи ошибки тоже будут добросовестно записаны и помещены в макрос. Чтобы их исправить, вы можете либо записать макрос вновь, либо отредактировать программный код макроса в редакторе Visual Basic (читайте ниже раздел Редактирование программного кода макроса в редакторе Visual Basic).
Паузы во время записи и ее завершение
Чтобы остановить запись после выполнения всех команд, которые вы хотели записать, щелкните на кнопке Остановить запись в панели инструментов с тем же названием (см. рис. 2.3). Запись прекратится, а все записанные команды будут сохранены в виде VBA-программы. (Если вы мне не верите, взгляните на полученный в результате программный код, - подробности ниже, в разделе 'Редактирование программного кода макроса в редакторе Visual Basic.)
Находясь в Word, вы можете сделать паузу в процессе записи макроса. Если вам необходимо выполнить команду, которая не должна быть частью макроса, щелкните на кнопке
Пауза (тоже находится в панели инструментов Остановить запись). Процесс записи впадет в летаргический сон, с этого момента игнорируя все используемые вами команды.
Во время паузы в записи кнопка Пауза будет выглядеть нажатой (рис. 2.4). Официально теперь это будет кнопка Возобновить запись. Щелкните на этой кнопке, когда снова будете готовы продолжить запись временно покинутого вами макроса.
Рис. 2.4. Использование панели инструментов Остановить запись в Word
Выполнение макросов
Весь смысл записи макросов состоит в возможности их последующего воспроизведения или, если предпочитаете, выполнения. Наблюдение за тем, как достаточно сложный макрос выполняет за вас целую кучу утомительной работы, несомненно, можно отнести к тем маленьким радостям, которые делают жизнь приятной, (По причинам, которые я объясню немного позже, непременно сохраните свой документ перед тем, как вызвать для выполнения макрос, выполняющий значительные модификации содержимого документа.)
Ввиду того, что макросы являются VBA-программами, все приемы, которые используются при запуске созданных вручную VBA-программ, применимы и для автоматически записанных макросов. Всегда можно сначала открыть диалоговое окно Макрос (Alt+F8), выбрать в нем нужный макрос, а затем щелкнуть на кнопке Выполнить (в PowerPoint это кнопка Запуск; рис. 2,5). Подробно о технике выполнения VBA-программ говорится в главе 4.
Рис. 2.5. Диалоговое окно Макрос (во многих VBA-приложениях оно называется именно так)
Автоматически записанный макрос не проявляет никакого интеллекта - макрос не может изменять свое поведение в зависимости от изменившихся условий. Будучи запущенным для выполнения, он пытается выполнить записанные команды, даже если в сложившейся ситуации в приложении эти команды вообще неприменимы. Например, если макрос предполагает, что вы находитесь в начале документа, а вы вызвали его, находясь в конце документа, вполне вероятно, что он не сделает ничего вообще. Если вызвать макрос, созданный для манипуляций с текстом, в то время, когда вы редактируете созданный вами рисунок, то такой макрос может свести на нет все ваши многочасовые сверхчеловеческие усилия по созданию шедевра, просто уничтожив последний. Мой вам совет: независимо от сложности макроса, сохраните документ перед тем, как выполнять этот макрос, и будьте всегда готовы воспользоваться командой Отменить (Ctrl+Z).
Редактирование макросов как способ создания программного кода
Не следует думать, что средству записи макросов останется только собирать электронную пыль, когда вы научитесь самостоятельно создавать VBA-код. В действительности, тогда вы сможете использовать это средство еще чаше. В конце концов, наиболее эффектные VBA-программы сильно зависят от объектов, методов и свойств, заимствованных именно из приложения. Вместо того чтобы печатать соответствующие команды вручную, почему бы не записать их как макрос?