Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Application.onTime - помогите отменить. / 11 сообщений из 11, страница 1 из 1
15.02.2012, 17:10
    #37663481
Sergey_AV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Здравствуйте, помогите, пожалуйста, отменить 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
15.02.2012, 17:59
    #37663625
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Введи дополнительную переменную типа "TimerStopped", ставь ее в True при Finish и если эта переменная True, не запускай больше обработку и таймер.
...
Рейтинг: 0 / 0
15.02.2012, 18:03
    #37663641
Sergey_AV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Shocker.Pro,
Так таймера-то пока и нету никакого. Функция должна выполняться один раз . Или не выполняться, если пользователь успеет нажать на кнопку.
Ваш совет поможет, если есть цикл, но даже в этом случае еще лишний раз функция выполниться успеет, что не хорошо.
...
Рейтинг: 0 / 0
15.02.2012, 18:18
    #37663688
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Sergey_AVесли пользователь успеет нажать на кнопку.если пользователь успел нажать на кнопку, ставится TimerStopped=TrueSergey_AVИли не выполняться,соответственно, в начале функции If TimerStopped Then Exit Sub
...
Рейтинг: 0 / 0
15.02.2012, 18:24
    #37663705
Sergey_AV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Shocker.Pro,
Ясно, теперь понял. Поможет, наверное, буду пробовать.
Но ведь во всех примерах приведен именно вариант с отменой onTime. Почему он-то не работает?
Это уже от любопытства чисто, ваш совет наверняка поможет.
Спасибо.
...
Рейтинг: 0 / 0
15.02.2012, 18:30
    #37663718
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Может потому что, где-то возникает лишнее событие Form_Activate?
Поставь точку останова, посмотри
...
Рейтинг: 0 / 0
15.02.2012, 18:33
    #37663727
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.onTime - помогите отменить.
Shocker.ProМожет потому что, где-то возникает лишнее событие Form_Activate?или может потому что допущена ошибка в этой строке:
Код: vbnet
1.
Application.OnTime Next_Timer_Time, "my", False


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


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


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


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