Выполнение процедуры VBA Excel без аргументов в назначенное время или через определенный промежуток времени с помощью метода Application.OnTime.
Синтаксис метода Application.OnTime
1 |
Application.OnTime EarliestTime, Procedure, LatestTime, Schedule |
Параметры метода Application.OnTime
Основные параметры:
- EarliestTime – время, когда необходимо выполнить указанную процедуру.
- Procedure – имя выполняемой процедуры.
Процедура Procedure
не должна иметь аргументов и не может быть объявлена в модуле формы.
В качестве аргументов параметра EarliestTime
используются следующие функции:
- TimeValue(«hh:mm:ss») – чтобы запланировать выполнение указанной процедуры в определенное время суток.
- Now + TimeValue(«hh:mm:ss») – чтобы запланировать выполнение указанной процедуры по истечении заданного времени с момента запуска процедуры с методом
Application.OnTime
.
Дополнительные параметры:
- LatestTime – интервал времени, в течение которого можно запустить указанную процедуру, если Microsoft Excel в назначенное время выполняет другую процедуру. По умолчанию указанная процедура будет запущена в любом случае после завершения предыдущей процедуры. Подробнее об этом читайте на сайте разработчика.
- Schedule – если задано значение True, будет запланировано выполнение указанной процедуры, False – очистка ранее установленной процедуры. Значение по умолчанию – True.
Параметр LatestTime я не тестировал, а вот любое применение параметра Schedule в значении False у меня в Excel 2016 вызывает ошибку. Поэтому в примерах я эти параметры не использую.
Примеры выполнения процедур по времени
Пример 1
Однократный запуск внешней процедуры через заданный промежуток времени:
1 2 3 4 5 6 7 |
Sub Primer1() Application.OnTime Now + TimeValue("00:00:10"), "Procedure1" End Sub Sub myProcedure1() MsgBox "Процедура запущена!" End Sub |
Процедура Procedure1
будет выполнена через 10 секунд после запуска процедуры Primer1
.
Пример 2
Однократный запуск внешней процедуры в заданное время:
1 2 3 4 5 6 7 |
Sub Primer2() Application.OnTime TimeValue("12:00:00"), "Procedure2" End Sub Sub Procedure2() MsgBox "Системное время - 12 часов!" End Sub |
Процедура Procedure2
будет выполнена в 12 часов по системному времени компьютера, если ранее была запущена процедура Primer2
.
Пример 3
Многократный запуск внешней процедуры:
1 2 3 4 5 6 7 8 9 |
Sub Primer3() Application.OnTime Now + TimeValue("00:00:01"), "Procedure3" End Sub Sub Procedure3() Cells(1, 1) = Cells(1, 1) + 1 If Cells(1, 1) = 100 Then Exit Sub Call Primer3 End Sub |
Процедура Primer3
запускает «условно бесконечный» секундомер в ячейке A1 активного рабочего листа, ограниченный 100 секундами с помощью условия.
Пример 4
Сохранение рабочей книги Excel каждые 10 минут:
1 2 3 4 5 6 7 8 |
Sub Primer4() Application.OnTime Now + TimeValue("00:10:00"), "Procedure4" End Sub Sub Procedure4() ThisWorkbook.Save Call Primer4 End Sub |
Процедуры Primer4() и Procedure4() будут работать в бесконечном цикле, сохраняя рабочую книгу Excel каждые 10 минут, до закрытия этой книги. Закрывать книгу следует не менее, чем через 10 минут после внесения последних изменений, для гарантированного их сохранения.