VBA последовательный запуск макросов в Excel
Макрос запускает другие макросы последовательно. Макросы работают с Excel таблицами. Нужно запускать макрос, если выполнение предыдущего завершено.
В текущем варианте:
Sub ОбновитьБазу()
Application.Run "Открыть"
Application.Run "Загрузка"
Application.Run "Выгрузка"
Application.Run "Закрыть"
End Sub
Некоторые макросы, разумеется, начинают работать раньше, чем завершаются предыдущие.
Из вариантов решения на ум приходят:
- счетчик и его отслеживание
- запуск по времени
Но я уверена, есть какое-то более правильное и красивое решение.
Ответы (1 шт):
Application.Run - это не самый простой и широко используемый способ запускать макросы (программы, функции) в VBA. Не углубляясь в детали, для Вашего случая подойдут такие способы:
- имя_программы (макроса) и без скобок перечисление аргументов через запятую
- Call имя_программы и в скобках перечисление аргументов через запятую.
Ниже - пример тестовой программы с обоими типами синтаксиса. По результатам выполнения видно, что программы выполняются строго последовательно, а не одновременно, как в Вашем случае.
Sub TEST()
Dim wait_sec_1 As Integer, wait_sec_2 As Integer
wait_sec_1 = 10
wait_sec_2 = 5
Macros1 wait_sec_1
Macros2 wait_sec_2
Call Macros1(wait_sec_1)
Call Macros2(wait_sec_2)
End Sub
Sub Macros1(wait_sec_1 As Integer)
Dim i As Integer
For i = 0 To wait_sec_1
Application.Wait(Now + TimeValue("0:00:01")): DoEvents 'one second wait
Next i
Debug.Print "First Macros work end"
End Sub
Sub Macros2(wait_sec_2 As Integer)
Dim i As Integer
For i = 0 To wait_sec_2
Application.Wait(Now + TimeValue("0:00:01")): DoEvents 'one second wait
Next i
Debug.Print "Second Macros work end"
End Sub