0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 62
1

Запуск и остановка Таймера

25.02.2016, 16:00. Показов 17691. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане, добрый день!
В просторах интернета по вопросу работы ТАЙМЕРА на VBA, я нашел много разных примеров, однако из-за слабой подготовки в программировании мне пока тяжело со всем этим разобраться. На одном из сайтов наше простой пример, где на форме идет время и есть кнопка.
Я пробую на форме UserForm1 через Label1 и Label2 передавать значения номера вопроса и работы таймера. Сама форма запускается, идет подсчет нажатия кнопки, отражается № вопроса и время. Но если я кликаю по кнопке 5 раз (количество вопросов) но время еще осталось, то все равно через некоторый промежуток времени (время, которое осталось до завершения) всплывает окно "время вышло". Причем время еще придостаточно но все равно вылазит окно.....
Как можно остановить таймер. И могут ли на форме присутствовать 2 таймера (для создания другого окна)
Вложения
Тип файла: xls Timer_OK_STOP.xls (43.5 Кб, 62 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2016, 16:00
Ответы с готовыми решениями:

Остановка макроса таймера, не закрывая файла
Доброе утро, форумчане. У меня есть макрос - смены картинки на листе. Макрос - работает как...

Остановка таймера обратного отчета при выделении ячеек листа
Уважаемые форумчане, доброго времени и здравия! Создал макрос обратного отчета времени и столкнулся...

Vbs запуск и остановка цикла
Небольшая менюшка с кнопкой, при нажатии которой будет выполняться цикл И останавливаться ...

Запуск и остановка таймера по нажатию кнопки
Добрый день. Прошу подсказать. Есть такая программка public class moving_test extends...

10
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
26.02.2016, 09:34 2
Можно не запускать таймер после какого-то нажатия кнопки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public iTimer As Date
Public st As Boolean
 
Sub TimerStart()
UserForm1.Label2.Caption = Format(iTimer, "n:ss")
 If Not st Then Exit Sub
    iTimer = iTimer - TimeValue("0:00:01")
        If iTimer > 0 Then
           Application.OnTime Now + TimeValue("00:00:01"), "TimerStart"
        Else
            MsgBox "Вермя вышло!!!!"
        End If
End Sub
''''''''''''''''''
Private Sub UserForm_Activate()
st = True
'''''''''''''''''
    Case 5
        st = False
      MsgBox "таймер не запущен"
Можно применить АПИ таймер

Visual Basic
1
2
3
4
5
'Импорт API функци создания системного таймера.
Private Declare Function SetTimer Lib "user32" ( _
  ByVal hWnd As Long, ByVal IdTimer As Long, _
  ByVal uTimeOut As Long, ByVal TimerProc As Long _
) As Long
1
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 62
26.02.2016, 11:59  [ТС] 3
Первый способ для меня, как мало грамотного в этих вопросах более понятен. Хочется уточнить пару моментов:
1).
Visual Basic
1
st = True, st = False
- через эту переменную идет включение и выключение таймера?
2).
Visual Basic
1
Public st As Boolean
- объявляем переменную для управления таймером?
3).
Visual Basic
1
If Not st Then Exit Sub
- эта строчка мне не очень понятна. Если перевести на русский, то ЕСЛИ st False, то выход из программы?
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
26.02.2016, 17:36 4
Ну как-то так: при загрузке формы запускаем таймер и после истечения времени проверяем состояние переменной. Если она True, то запускаем снова таймер.
После нужного нажатия кнопки назначаем st = false. В результате при истечении времени OnTime процедура TimerStart завершается и не происходит очередной запуск таймера Application.OnTime
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 62
09.03.2016, 09:11  [ТС] 5
Доброго времени суток!
Alex77755, ваш код работает на УРА, но только для Excel (VBA). Я попробовал применить к VBA 6.0 выдает ошибку на :
Visual Basic
1
Application.OnTime
Что может быть не так?
Может для VBA 6.0 стоит применить Timer и привязать его к Label. Это я тоже пробовал, но не совсем понимаю как этот таймер должен работать с обратным осчетом.
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
09.03.2016, 09:29 6
Цитата Сообщение от A_3485 Посмотреть сообщение
Я попробовал применить к VBA 6.0

В VB6 есть свой компонент "таймер", который можно использовать без танцев с бубном.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 62
09.03.2016, 10:22  [ТС] 7
Вот этот компонент я и не могу применить.
Понимаю, что через свойство Enable таймер запускается и отключается, через Timer1.Interval задаю время работы таймера (например 3 минуты Timer1.Interval = 30000), а как совместить это все вместе не понимаю. Тем более, что хочу, чтобы в Label отражалось время с обратным отсчетом.
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
09.03.2016, 10:46 8
Цитата Сообщение от A_3485 Посмотреть сообщение
время работы таймера (например 3 минуты Timer1.Interval = 30000
Ну, во-первых, 3 минуты - это будет 180000.
А во-вторых, это не время работы таймера, а его интервал.

Цитата Сообщение от A_3485 Посмотреть сообщение
а как совместить это все вместе не понимаю
Например,так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Form_Load()    'зарузка формы
    Timer1.Enabled = False 'таймер остановлен
    Timer1.Interval = 1000 'интервал таймера в миллисекундах
End Sub
 
Private Sub Command1_Click() 'кнопка запуска таймера
     Label1.Caption = "30"   'время работы таймера в секундах
     Timer1.Enabled = True   'запускаем таймер
End Sub
 
Private Sub Timer1_Timer() '
    Label1.Caption = Label1.Caption - 1 'при каждом тике таймера уменьшаем значение в Label  на единицу
    If Label1.Caption = "0" Then        'если время вышло
       Timer1.Enabled = False           'то останавливаем таймер
       MsgBox "Время вышло"             'выводим сообщение
    End If
End Sub
 
Private Sub Command2_Click() 'кнопка остановки таймера
     Timer1.Enabled = False  'останавливаем таймер
End Sub
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 62
09.03.2016, 11:20  [ТС] 9
SoftIce, спасибо за помощь. Сегодня вечером обязательно проверю и отпишусь.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 62
11.03.2016, 22:30  [ТС] 10
SoftIce, спасибо за примеры. С ними мне все понятно. А каким образом в этот пример можно добавить обратный отсчет например 5 минут в формате 05:00, 04:59 и т.д.
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.03.2016, 23:00 11
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от A_3485 Посмотреть сообщение
апример 5 минут в формате 05:00, 04:59
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim n As Integer
Private Sub Form_Load()    'зарузка формы
    Timer1.Enabled = False 'таймер остановлен
    Timer1.Interval = 1000 'интервал таймера в миллисекундах
End Sub
 
Private Sub Command1_Click() 'кнопка запуска таймера
     n = 300                 'время работы таймера в секундах
     Timer1.Enabled = True   'запускаем таймер
End Sub
 
Private Sub Timer1_Timer() '
    n = n - 1                           'при каждом тике таймера уменьшаем значение  на единицу
    'Label1.Caption = FormatDateTime(CStr(n \ 60) & ":" & CStr(n Mod 60), vbShortTime)
     Label1.Caption = Format$(n \ 60, "00") & ":" & Format$(n Mod 60, "00")
    If n = 0 Then                       'если время вышло
       Timer1.Enabled = False           'то останавливаем таймер
       MsgBox "Время вышло"             'выводим сообщение
    End If
End Sub
0
11.03.2016, 23:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2016, 23:00
Помогаю со студенческими работами здесь

Запуск/остановка таймера по нажатию на TSpeedButton
Необходимо сделать так При нажатии на кнопку SpeedButton: • время выводимое компонентом Timer...

Запуск/остановка таймера при вводе в Edit команд Timer Start/Timer Stop
Суть вот в чём на форме есть таймер который выполняет обратный отсчёт и есть Edit, задача вот...

Остановка таймера
Есть таймер. Нужно остановить его, если открыта вторичная форма,и запустить дальше,если она...

Остановка таймера
Всем Привет! Как можно остановить таймер, а потом через несколько секунд что бы он заново...

Принудительная остановка таймера
Здравствуйте! Ситуация следующая, у моей программы триал версия, но обойти ее очень просто т.к. при...

Остановка таймера и MessageBox
private void timer1_Tick(object sender, EventArgs e) { MessageBox.Show("Время...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru