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

Файлы для скачивания:
ФайлОписаниеРазмер файла:Скачивания
Скачать этот файл (P_Macros_05.zip)Пример 14 Кб475

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

При попытке назначить второй макрос той же кнопке мы обнаруживаем, что этого сделать нельзя, одна кнопка - один макрос. Что делать? Перед нами вырисовывается вариант, удалить первый и второй макрос и записать один длинный, который и копирует, и присваивает, но мы понимаем, что чем длине макрос, тем выше вероятность совершить ошибку при записи и начать все заново, так можно и до ночи провозиться.

Поэтому я предлагаю следующее решение: записать несколько коротких макросов, свести их в одном и уже этот большой макрос присвоить нашей Конопке.

Сделать это очень просто. Записываем два макроса, как это сделать в статье "Как записать макрос не зная языка VBA?". Суть работы макросов будет заключаться в следующем:

  • Макрос1 - будет копировать данные из диапазона E2:E6 и вставлять их в диапазон G2:G6, как значения с сохранением форматов.
  • Макрос2 - будет выделять данные в диапазоне G2:G6 красным цветом и делать их "жирными".

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

Затем нажимаем сочетание клавиш Alt+F11, откроется окно редактора VBA, и мы увидим код двух наших макросов, записанный друг под другом:

Как соединить несколько макросов в один?

Встаем курсором после слов End Sub (второго макроса), и пишем следующий код:

Sub Макрос3()
    Call Макрос1
    Call Макрос2
End Sub

Должно получиться так:

kak-soedinit-neskolko-makrosov-v-odin_2.png

Если у вас записанные макросы оказались в разных модулях - это никак не влияет на их выполнение. Вставьте код "Макрос3" в любой из этих модулей или создайте 3-й модуль и вставьте код в него.

После чего закрываем редактор VBA, возвращаемся в нашу рабочую книгу, создаем кнопку на листе и назначаем ей "Макрос3", как  это сделать описано в статье "Как сделать кнопку для запуска своего макроса?"

После чего нажимаем кнопку и видим, что макросы выполняются последовательно:

kak-soedinit-neskolko-makrosov-v-odin_3.png

Комментарии  

# Участник 20.07.2016 17:21
Это великолепно всё НО! При нажатии alt+F8 в списке макросов будут все 3. Задача, как сделать в списке 1 , но выполняющий 3 макроса. ( у меня уже много накопилось макросов и список не резиновый)
Ответить | Ответить с цитатой | Цитировать
# Хвостов Сергей 20.07.2016 17:37
Перед началом тех макросов, которые не должны отображаться в списке напишите Private. Чтобы получилось так: Private Sub Макрос1()
Ответить | Ответить с цитатой | Цитировать
# Участник 21.07.2016 14:45
Спасибо Сергей. Помогает.
По теме: До вас я по другому объединял макросы. Создал просто отдельный макрос вот такого вида:
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
Ответить | Ответить с цитатой | Цитировать
# Хвостов Сергей 21.07.2016 15:13
Да, так можно использовать макросы из других книг.
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Защитный код
Обновить