Страницы: 1
RSS
Отключение всех таймеров, Сбросить все ранее запущенные таймеры
 
Добрый день.
Строка:
Код
 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
 

Запускает таймер отложенного запуска макроса.

Как определить и отключить все запущенные таймеры и отключить их.
Файл примера как смог придумал. Добавил
Изменено: Максим Колесников - 24.11.2021 16:31:09
Не внимателен при вводе текста хорошо что есть F7
 
Максим Колесников, здравствуйте
Файла нет. Достаточно просто код показать (оформить тэгом <> на панели)
Изменено: Jack Famous - 24.11.2021 16:06:30
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
что мешает прочитать документацию по Application.OnTime???
там описан механизм как запускать таймер (это вижу вы освоили), как отключить, вызов процедуры, что ждет своего часа (всего-то нужно запомнить куда-нибудь время при установке таймера)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Как определить и отключить все запущенные таймеры и отключить их.
Не встречал такого универсального способа. Слово "таймеры" не совсем удачно, речь идет о заданиях.

Игорь в предыдущем ответе справедливо указывает, что нужно запомнить куда-то время, которое было указано при вызове метода Ontime для формирования задания. Дополнительный вопрос - куда запоминать? Если в переменную уровня модуля, то при "сбросе" проекта (например, из-за ошибки) эта переменная обнулится и мы уже не сможем аннулировать задание. Так что, писать нужно в ячейку листа, в свойства книги, имя книги и т.п.
Но и это не поможет, если мы закроем книгу с информацией о заданиях без сохранения, а Excel продолжит свою работу. В назначенное время Excel откроет нашу книгу и начнет выполнять задание. Прямо как самурай.  :)  
Изменено: sokol92 - 24.11.2021 20:27:05
Владимир
 
Цитата
sokol92 написал:
Не встречал
но вопрос интересный, и к несчастью решения не имеет похоже.
По вопросам из тем форума, личку не читаю.
 
у меня в записях есть такой пример, не знаю поможет или нет

Код
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
Изменено: New - 24.11.2021 20:40:30
 
Цитата
New написал:
не знаю поможет или нет
См. #4.
Изменено: sokol92 - 24.11.2021 20:31:12
Владимир
 
New, думаю что не поможет . да и при очистке dt очистка расписания не сработает. Вааще странно, что к коллекции такой ущербный доступ.
По вопросам из тем форума, личку не читаю.
 
предлагаю записывать переменную для остановки таймера в:
1. в переменную
2. на скрытый лист в ячейку
3. в текстовый файл рядом с Excel файлом, при остановке таймера удалять txt файл
Какой-нибудь метод да сработает )))
Изменено: New - 24.11.2021 20:36:28
 
Проблема в том, что при закрытии экземпляра Excel очередь заданий исчезает, так что шансов "отловить" ее следы нет. Исходный код Excel недоступен.
Владимир
 
Цитата
sokol92 написал:
Проблема в том
и в том  что если нужно остановить все задачи, то ведь они могут быть созданы не только этим кодом.... то есть кто-то сделал и ничего об этом не сказал.
По вопросам из тем форума, личку не читаю.
 
вот вам бы всё усложнять)) перегрузят комп и всё нормализуется )
P.S. сейчас наговорите и все побегут писать вирусы с помощью неубиваемого Application.OnTime )
Изменено: New - 24.11.2021 21:55:02
 
Цитата
написал:
Такой пример
Думаю такой пример это то, что нужно. просто необходимо перекроить под себя.
Цитата
написал:
в переменную
В моем случая это нормальное решение
потому что
Цитата
написал:
при закрытии экземпляра Excel
мне необходима остановка всех таймеров.

всем спасибо.!!!!!!
Не внимателен при вводе текста хорошо что есть F7
Страницы: 1
Читают тему (гостей: 1)
Наверх