Страницы: 1
RSS
Запуск по расписанию макроса с аргументами
 
У меня успешно работала команда
Код
Application.OnTime Now() + TimeSerial(0, 0, 2), "Лист4.Poll"
В процессе расширения функционала мне стало нужно запускать ту же процедуру опроса, но уже с параметрами. Попробовал добавить
Код
Application.OnTime Now() + TimeSerial(0, 0, 2), "Лист4.Poll(" & Number & ")" 
Естественно, VBA начал ругаться.
Не подскажите, возможна ли передача аргументов при таком способе вызова процедуры?
 
У меня получилось только через промежуточный макрос. Что  то типа такого
В стандартный модуль
Код
Sub myMacro()
    Application.OnTime Now() + TimeSerial(0, 0, 2), "Лист4.tmpMacro"
End Sub
В модуль листа
Код
Sub tmpMacro()
    myNum = 44
    Call Poll(myNum)
End Sub

Sub Poll(iNum)
    MsgBox iNum * 100
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Запуск OnTime с параметром делается так:
Application.OnTime Now() + TimeSerial(0, 0, 1), "'Лист4.Poll " & Number & "'"
 
Владимир, спасибо!
Согласие есть продукт при полном непротивлении сторон
 
При запуске OnTime с параметром есть один нюанс  - если нужно отменить уже заряженный запуск по Schedule:=False (например, при закрытии книги), то требуется указывать не только имя процедуры, но и тот же параметр:
Application.OnTime EarliestTime:=SavedTimeToRun, Procedure:="'Лист4.Poll " & SavedNumber & "'", Schedule:=False
здесь SavedTimeToRun - глобальная переменная, в которой сохранена дата и время отложенного запуска макроса, а SavedNumber  - глобальная переменная, в которой сохранено значение параметра Number, посланного в OnTime.
 
Спасибо, работает.
И за дополнение спасибо - отмена запуска макроса у меня делалась сложным кодом, а оказывается можно в одну строку уложиться :)
 
Цитата
Sanja написал: Владимир, спасибо!
Виталий, всегда рад поделиться знаниями :)

Цитата
stahon написал: И за дополнение спасибо
А это уже не из знаний, а из опыта. Приятно, что и это пригодилось, удачи Вам!
 
Можно Number сделать глобальной переменной, которую будет использовать запланированный макрос, и присвоить ей значение перед Application.OnTime.
Страницы: 1
Наверх