Трюк №84. Простое подключение кнопок к макросам

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

Обычно пользователи предпочитают выполнять макросы, либо нажав сочетание клавиш, либо щелкнув простую кнопку, а не искать нужный макрос в меню и диалоговых окнах. Самый известный способ добраться до кнопки — это панель инструментов Формы (Forms), которую можно открыть, выбрав команду Вид → Панели инструментов → Формы (View → Toolbars → Forms). Эти кнопки, по нашему мнению, представляют собой лучший выбор среди вариантов запуска макросов, особенно записанных макросов, так как такие макросы часто требуют, чтобы в момент выполнения активен был определенный рабочий лист.

Проще говоря, записанные макросы всегда используют ActiveSheet, если вы записывали макрос, не переключаясь между листами. Это означает, что если пользователь находится не на требуемом листе (другими словами, не на том же листе, на котором вы записывали макрос), то записанный макрос чаще всего выдает ошибку и останавливается или меняет данные на неправильном листе. Благодаря кнопке на рабочем листе, можно заставить пользователя перейти к нужной кнопке на нужном рабочем листе, чтобы настроить подходящие условия для выполнения макроса перед его запуском.

Почему кнопка с панели инструментов Формы (Forms), а не с панели инструментов Элементы управления (Control Toolbox)? Кнопки практически всегда применяются для распознавания щелчка мыши и затем запуска определенного макроса. Командную кнопку с панели инструментов Элементы управления (Control Toolbox) необходимо использовать, только если требуется распознать другие события, например, двойной щелчок, щелчок правой кнопкой мыши и т. д. Элементы управления на этой панели известны как элементы управления ActiveX, и использование их только для запуска макроса добавляет Excel совершенно ненужную нагрузку, особенно если кнопок много. Это сродни забиванию гвоздей кувалдой.

Если в рабочей книге много кнопок и каждая кнопка используется для запуска определенного макроса, можно присоединить макросы к кнопкам, правой кнопкой мыши щелкнув границу кнопки и в контекстном меню выбрав команду Назначить макрос (Assign Macro). Затем в диалоговом окне Назначить макрос объекту (Assign Macro) выберите подходящий макрос (рис. 7.2).

Рис. 7.2. Выделенная кнопка showcal и диалоговое окно назначения макроса объекту с выбранным макросом

Рис. 7.2. Выделенная кнопка showcal и диалоговое окно назначения макроса объекту с выбранным макросом

Каждая кнопка обычно запускает свой макрос, поэтому часто приходится прокручивать целый список макросов, чтобы найти нужный. Есть простой способ назначить все кнопки одному макросу, но при этом сделать так, чтобы каждая кнопка запускала свой макрос.

Поместите следующий код в любой стандартный модуль. Выберите команду Разработчик → Редактор Visual Basic (Developer → Visual Basic Editor) (сочетание клавиш Alt/Option+Fll) и создайте новый модуль командой Insert > Module. Затем введите код из листинга 7.6.

1
2
3
4
//Листинг 7.6
Sub WhichButton()
	Run Application.Caller
End Sub

Теперь необходимо присвоить каждой кнопке то же имя, что и у макроса, который она должна запускать. Чтобы дать имя кнопке с панели инструментов Формы (Forms), щелкните ее и замените имя в поле имени названием макроса, который будет запускать эта кнопка. Сделайте это для всех кнопок. Теперь, если вы назовете кнопку Macro1 и назначите ее макросу WhichButton, щелчок на этой кнопке запустит макрос Macro1.

Top