В данной статье я расскажу, как соединить несколько макросов в один, чтобы, например, назначить одной кнопке выполнение нескольких макросов.
Итак, суть проблемы заключается в следующем - мы записали какой ни будь макрос который, например, копирует данные из одного диапазона в другой, создали для этого макроса кнопку на рабочем листе и привязали к ней данный макрос. Потом нам понадобилось записать еще один макрос, который должен, например, скопированным данным присваивать некий формат и нам необходимо, чтобы эти макросы выполнялись один за другим при нажатии все той же кнопки.
При попытке назначить второй макрос той же кнопке мы обнаруживаем, что этого сделать нельзя, одна кнопка - один макрос. Что делать? Перед нами вырисовывается вариант, удалить первый и второй макрос и записать один длинный, который и копирует, и присваивает, но мы понимаем, что чем длине макрос, тем выше вероятность совершить ошибку при записи и начать все заново, так можно и до ночи провозиться.
Поэтому я предлагаю следующее решение: записать несколько коротких макросов, свести их в одном и уже этот большой макрос присвоить нашей Конопке.
Сделать это очень просто. Записываем два макроса, как это сделать в статье "Как записать макрос не зная языка VBA?". Суть работы макросов будет заключаться в следующем:
После того как мы запишем макросы - удалим столбец G полностью, чтобы не сохранилось форматирование ячеек.
Затем нажимаем сочетание клавиш Alt+F11, откроется окно редактора VBA, и мы увидим код двух наших макросов, записанный друг под другом:
Встаем курсором после слов End Sub (второго макроса), и пишем следующий код:
Sub Макрос3() Call Макрос1 Call Макрос2 End Sub
Должно получиться так:
Если у вас записанные макросы оказались в разных модулях - это никак не влияет на их выполнение. Вставьте код "Макрос3" в любой из этих модулей или создайте 3-й модуль и вставьте код в него.
После чего закрываем редактор VBA, возвращаемся в нашу рабочую книгу, создаем кнопку на листе и назначаем ей "Макрос3", как это сделать описано в статье "Как сделать кнопку для запуска своего макроса?"
После чего нажимаем кнопку и видим, что макросы выполняются последовательно:
Комментарии
1. Текст одного макроса получается очень большой и не всегда удобно его потом читать для исправления ошибок или внесения изменений.
2. CALL очень удобен если, например, записать универсальный макрос, а потом добавлять его (через CALL) в несколько других макросов - можно существенно сократить длину кода.
3. Если ваш макрос вставлен через CALL в несколько других макросов и в нем обнаружится ошибка или его просто нужно переделать, то править код нужно будет только в одном месте, а не "бегать" глазами по коду нескольких макросов.
По теме: До вас я по другому объединял макросы. Создал просто отдельный макрос вот такого вида:
Sub e()
' Глобальная правка файла e
Application.Run "книга1.xls!TRA NSLIT"
Application.Run "книга1.xls!BRA NDS"
Application.Run "PERSONAL1.XLSB !BRANDS"
Application.Run "книга1.xls!NUM BER"
Application.Run "книга1.xls!BRA ND"
Application.Run "книга1.xls!NAM E_NEW_1"
Application.Run "PERSONAL1.XLSB!NAME_NEW_1"
End Sub