powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Application.onTime - помогите отменить.
11 сообщений из 11, страница 1 из 1
Application.onTime - помогите отменить.
    #37663481
Sergey_AV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите, пожалуйста, отменить Application.onTime в Excel VBA.
Код в модуле
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Option Explicit
Public Next_Timer_Time As Variant

Public Sub Start1() ' запускается при нажатии на кнопку на листе.
        Cells(5, 4).Value = "Ready!!!"
        UserForm1.Show
End Sub

Public Sub Finish1()
Application.OnTime Next_Timer_Time, "my", False
        Unload UserForm1
End Sub

Public Sub my()
Cells(5, 4).Value = "QWERTY!!!"
End Sub


Код в форме UserForm1:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub CommandButton1_Click()
Module1.Finish1
End Sub

Private Sub UserForm_Activate()
Next_Timer_Time = Now + TimeValue("00:00:10")
Application.OnTime Next_Timer_Time, "my"
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Module1.Finish1
End Sub


Через 10 секунд после запуска на листе появляется соответствующая надпись. Но она появляется даже после нажатия на кнопку на форме!! То есть
Код: vbnet
1.
Application.OnTime Next_Timer_Time, "my", False


не срабатывает. Почему? Как сделать, чтобы сработало (синтаксис разный уже пробовал - или не работает, или ошибку выдает)?
Заранее спасибо.
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663625
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Введи дополнительную переменную типа "TimerStopped", ставь ее в True при Finish и если эта переменная True, не запускай больше обработку и таймер.
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663641
Sergey_AV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Так таймера-то пока и нету никакого. Функция должна выполняться один раз . Или не выполняться, если пользователь успеет нажать на кнопку.
Ваш совет поможет, если есть цикл, но даже в этом случае еще лишний раз функция выполниться успеет, что не хорошо.
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663688
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_AVесли пользователь успеет нажать на кнопку.если пользователь успел нажать на кнопку, ставится TimerStopped=TrueSergey_AVИли не выполняться,соответственно, в начале функции If TimerStopped Then Exit Sub
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663705
Sergey_AV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Ясно, теперь понял. Поможет, наверное, буду пробовать.
Но ведь во всех примерах приведен именно вариант с отменой onTime. Почему он-то не работает?
Это уже от любопытства чисто, ваш совет наверняка поможет.
Спасибо.
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663718
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может потому что, где-то возникает лишнее событие Form_Activate?
Поставь точку останова, посмотри
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663727
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProМожет потому что, где-то возникает лишнее событие Form_Activate?или может потому что допущена ошибка в этой строке:
Код: vbnet
1.
Application.OnTime Next_Timer_Time, "my", False


а должно быть
Код: vbnet
1.
Application.OnTime Next_Timer_Time, "my", , False
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37663750
Sergey_AV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Да нет,
Код: vbnet
1.
Application.OnTime Next_Timer_Time, "my", , False


не катит - ошибку выдает. И другие варианты синтаксиса - тоже (с := и др.). А этот - без ошибки, но не работает.
А по поводу событий - посмотрю еще.
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37667051
Sergey_AV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Нет, не подходит все-таки ваш вариант. Хотя тут скорее я задачу не совсем правильно сформулировал.
Допустим, есть процедура, которая запускается нажатием на кнопку "Старт", в ней - автовызов самой себя, еще через 5 минут.
В ней же флаг, разрешающий ее выполнение.
И если нажимается кнопка "Стоп", и затем, меньше чем через 5 минут, "Старт", то и плановый запуск остается висеть в памяти, и новый запускается. А если такое произойдет не раз...
Или, может, в Экселе можно тоже, чтобы только один onTime в памяти висел?
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37667129
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну значит надо не запускать второй ontime, если запущен первый
...
Рейтинг: 0 / 0
Application.onTime - помогите отменить.
    #37667156
Sergey_AV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Спасибо за помощь, проблема решена.
Помог синтаксис
Код: vbnet
1.
Call Application.OnTime(EarliestTime:=Next_Timer_Time, Procedure:="my", Schedule:=False)


Как же я люблю метод научного тыка!!!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Application.onTime - помогите отменить.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]