Запись макросов VBA: макрорекордер (MacroRecorder)

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

Основным средством создания макросов является запись последовательности действий с помощью команды меню Сервис→Макрос→Записать (Tools→Macro→Record...). Причем это крайне мало зависит от квалификации пользователя.

Обратите внимание! Начиная с PowerPoint 2010, данная программа не содержит макрорекордера. Записывать программы на VBA можно только вручную, либо воспользовавшись предыдущими версиями. Последний спосооб прекрасно работает и не вызывает проблем при переносе (они не обнаружены), но нужно учитывать, что развитие объектной модели не позволит воспользоваться всеми возможностями приложения.

В Word с версии 2007 запуск производится из панели Вид (справа) или панели Разработчик.

После этого выводится диалог

[Recorder Dialog]

в котором надо указать название макроса (можно изменить позднее), место его хранения (обычно шаблон, чаще всего Normal.dot), подключение к кнопке панели инструментов или горячей клавише (необязательно и можно исправить) и желаемое описание. Запись действий начинается после завершения работы с диалогом. Вместо него выводится простейшая панель:

[Recorder Dialog]

позволяющаяя приостановить запись или прекратить (завершить) её.

В версиях с 2007 данная панель может не выводиться и для остановки придется зайти в соответствующий подпункт показанного выше меню.

Надо заметить, что если в настройках программы указано запрашивать сохранение шаблона, то при отказе от него (во время закрытия программы) макрос будет потерян!

После завершения процесса записи, макрос сразу готов к исполнению. Если была задана кнопка или горячая клавиша, то запустить макрос можно с их помощью. Иначе – через диалог (Alt+F8).

[Run Dialog]

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

На занятиях обсуждается вопрос создания программы с названием «a». Так как список выводится в алфавитном порядке, это название всегда будет располагаться на первом месте и становится активным при вызове диалога. Это создает дополнительное удобство при доработке, тестировании и отладке вновь создаваемых программ (не нужен лишний поиск в списке).

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

Размещение макросов

Основные варианты размещения макросов наглядно иллюстрирует приведенный выше рисунок диалога запуска.

Как уже сказано выше, код макроса чаще всего сохраняется в шаблоне Normal.dot(m). В этом случае он будет доступным всегда.

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

Но, кроме того, с версии Word'95, макросы могут храниться в самом документе. Как правило, это нужно для автоматизации его работы. Здесь возникают сразу две проблемы. Во-первых, любой документ с расширением «.doc» может содержать вредоносный код. Для MS Office с версии 2007 она решена путем добавления к расширению имени файла буквы «m»: .docm, .xlsm... Попытка переименования такого файла — признак для системы безопасности возможного злого умысла.

Во-вторых, переданный другому человеку документ со встроенной программой содержит ее версию на момент передачи. А, так как любая программа может совершенствоваться, то ее обновление представляет собой дополнительную трудность. Если предполагается такой вариант развития событий, то гораздо удобнее воспользоваться шаблоном, либо, в крайнем случае созданием надстройки.

Установку новой версии шаблона на пользовательские компьютеры всегда можно автоматизировать использованием командных файлов!!!.

Шаблон должен сразу сохраняться как Шаблон с поддержкой макросов (*.docm или *.xltm для Word и Excel, соответственно).

В самом шаблоне макросы помещаются в модули. Во время записи таким модулем будет «New Macro». Но, по мере накопления, с ними становится неудобно работать из-за большого объема. Тогда пользователь может создать свои тематические модули и перенести туда подходящие по смыслу макросы. Например, для обработки таблиц, для устранения ошибок в тексте, учебные, библиотеки подпрограмм и т.д. При этом следует учитывать, что могут перестать работать некоторые абсолютные ссылки на них.

Переименование созданного макроса осуществляется очень просто. Макрос всегда начинается одинаково:

	Sub Macro_Name()

Здесь «Macro_Name» — его имя, которое нужно изменить.

Кстати, сохранение (Ctrl+S) в среде VBE приводит к сохранению шаблона с отредактированными макросами. При наличии привычки сохранятся, у вас минимизируется вероятность потери работы.

Что происходит в процессе записи?

Во время работы макрорекордера записываются все действия, производимые пользователем

  1. Нажатия клавиш, приводящие к вводу текста или перемещению курсора.
  2. Выполнение пунктов главного или контекстного меню, исключая нажатия на кнопки в ленте.
  3. Действия, задаваемые горячими клавишами.

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


Почему записанный макрос требует редактирования?

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

В-нулевых, это учит программировать! Это не описка. Данная причина важнее всех, так как пользователь, разработавший алгоритм действий, намного быстрее поймет то, что записалось в программе, чем кто бы то ни было другой. А любые малопонятные мелочи всегда можно разобрать отдельно с помощью Справки.

Во-первых, при записи макроса могут быть допущены тривиальная ошибка: нажата не та клавиша, а начинать все с начала зачастую слишком накладно. В обычной жизни мы выполним отмену (Ctrl+Z или Alt+BackSpace) для команды, либо вернем курсор на место, если переместили его не туда. Точно также можно поступить и при записи макроса. Недостаток заключается в том, что тогда будут выполняться бессмысленные действия, отнимающие время. Это не беда, хотя аккуратному человеку крайне неприятно. Лучше поправить ошибку, что означает удаление лишних строк и исправление некоторых значений команд. (Еще один аргумент в пользу заблаговременного продумывания действий.)

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

В-третьих, значительная часть макросов требует ветвления или многократного повторения, что может быть запрограммировано только вручную.

В-четвертых, есть ситуации, когда надо указать множество условий для выполнения программы, а тогда без достаточно сложных диалогов обойтись не удастся. Иначе — запись и запуск множества макросов.

В-пятых, запись макросов ЗАПРОГРАММИРОВАНА людьми, но не все ситуации могут решаться однозначно. Пример: полужирное начертание. С точки зрения нормального человека оно либо включено (True), либо нет (False). Но средой предусмотрен и третий вариант: переключить, то есть сделать наоборот (wdToggle). Кто-то из особо умных программистов сделал его командой по умолчанию. То есть мы записали выключение, но работать как задумано оно будет, только если до этого был полужирный текст.

В-шестых, посмотрите на приведенный выше код выполнения диалога. Вместе с красным цветом присвоится шрифт, кегль, начертания и много что еще. Для большинства случаев это не только нежелательно, но и неприемлемо.

Список можно продолжать до бесконечности для особо упёртых...


Copyright © 1993–2020 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.