Sub timmer()
Application.OnTime Now + TimeValue("00:00:03"), "TEST"
MsgBox ("прошло 4 секунды")
End Sub
Sub TEST()
Application.OnTime Now + TimeValue("00:00:04"), "timmer"
MsgBox ("прошло 3 секунды")
End Sub
Запускает таймер отложенного запуска макроса.
Как определить и отключить все запущенные таймеры и отключить их. Файл примера как смог придумал. Добавил
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
что мешает прочитать документацию по Application.OnTime??? там описан механизм как запускать таймер (это вижу вы освоили), как отключить, вызов процедуры, что ждет своего часа (всего-то нужно запомнить куда-нибудь время при установке таймера)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
написал: Как определить и отключить все запущенные таймеры и отключить их.
Не встречал такого универсального способа. Слово "таймеры" не совсем удачно, речь идет о заданиях.
Игорь в предыдущем ответе справедливо указывает, что нужно запомнить куда-то время, которое было указано при вызове метода Ontime для формирования задания. Дополнительный вопрос - куда запоминать? Если в переменную уровня модуля, то при "сбросе" проекта (например, из-за ошибки) эта переменная обнулится и мы уже не сможем аннулировать задание. Так что, писать нужно в ячейку листа, в свойства книги, имя книги и т.п. Но и это не поможет, если мы закроем книгу с информацией о заданиях без сохранения, а Excel продолжит свою работу. В назначенное время Excel откроет нашу книгу и начнет выполнять задание. Прямо как самурай.
у меня в записях есть такой пример, не знаю поможет или нет
Код
Dim dt As Date, blRun As Boolean
Sub TimerStart()
blRun = True
Range("A1").NumberFormat = "h:mm:ss"
Call PeriodicalRun
End Sub
Sub TimerStop()
blRun = False
On Error Resume Next
Application.OnTime EarliestTime:=dt, Procedure:="PeriodicalRun", Schedule:=False
On Error GoTo 0
Range("A1") = Empty
End Sub
Private Sub PeriodicalRun()
If blRun Then
Range("A1") = Time
dt = Now + TimeValue("00:00:01")
Application.OnTime dt, "PeriodicalRun"
End If
End Sub
предлагаю записывать переменную для остановки таймера в: 1. в переменную 2. на скрытый лист в ячейку 3. в текстовый файл рядом с Excel файлом, при остановке таймера удалять txt файл Какой-нибудь метод да сработает )))
и в том что если нужно остановить все задачи, то ведь они могут быть созданы не только этим кодом.... то есть кто-то сделал и ничего об этом не сказал.
вот вам бы всё усложнять)) перегрузят комп и всё нормализуется ) P.S. сейчас наговорите и все побегут писать вирусы с помощью неубиваемого Application.OnTime )