2014-01-02 7 views
2

Я пытаюсь настроить базовый секундомер для отслеживания прошедшего времени. Button1 должен запускать часы с 0, Button2 останавливает часы и записывает, сколько минут и секунд прошло с момента запуска таймера. У меня есть кнопки, размещенные на листе, и просто нужен способ расчета прошедшего времени. Какой был бы лучший подход? Вот код, я работаю сСекундомер в excel vba?

Private Sub CommandButton1_Click() 
    startTime = Timer 
End Sub 

Private Sub CommandButton2_Click() 
    Dim finalTime As Single 
    finalTime = Timer - startTime 
    MsgBox Format(finalTime, "0.00") 
End Sub 

Проблема с этим кодом, что это отображение времени прошло только после того, как я нажимаю button2. Мне нужен рабочий таймер на моем листе excel.

+0

Рассматривайте обновление экрана 10 раз в секунду или около того? –

ответ

2
Public Started As Boolean 
Dim myTime As Date 
Sub StartTimer() 
    If Not Started Then 
     myTime = Time 
     Started = True 
    Else 
     If MsgBox("Do you really want to restart?", vbYesNo) = vbYes Then 
      myTime = Time 
     End If 
    End If 
End Sub 
Sub StopTimer() 
    If Not Started Then 
     MsgBox "The timer is stopped." 
    Else 
     MsgBox Format(Time - myTime, "hh:mm:ss") 
     Started = False 
    End If 
End Sub 

youtube

link

+0

Запуск таймера? – user3152805

+0

http://www.mrexcel.com/forum/excel-questions/50601-implementing-stopwatch-excel.html –

+0

изменить 'myTime = myTime' на' myTime = Time' после перезагрузки msgbox –

1

Если вам нужна точность, Excel, вероятно, не место, чтобы сделать это. Но если достаточно близко достаточно близко, то вот как я это сделаю.

В стандартном модуле:

Public gbStop As Boolean 
Public gdtStart As Date 

Sub UpdateTime() 

    Sheet1.Range("rngTimer").Value = Now - gdtStart 
    DoEvents 

    If Not gbStop Then 
     Application.OnTime Now + TimeSerial(0, 0, 1), "UpdateTime" 
    End If 

End Sub 

В модуле класса Лист1 в

Private Sub CommandButton1_Click() 

    gbStop = False 
    gdtStart = Now 
    Application.OnTime Now + TimeSerial(0, 0, 1), "UpdateTime" 

End Sub 

Private Sub CommandButton2_Click() 

    gbStop = True 

End Sub 

При нажатии кнопки Button1, gbStop устанавливается в ложь, время начала записывается в общей переменной, а Процедуру UpdateTime планируется запустить через 1 секунду позже.

Спустя секунду обновляется UpdateTime и изменяется значение ячейки с именем rngTimer, чтобы показать прошедшее время между Now и началом, записанным в Button1_Click. Если gbStop по-прежнему False, UpdateTime планирует запустить снова за другую секунду.

В конце концов, вы нажимаете Button2, который устанавливает общедоступную переменную gbStop в значение True. В следующий раз, когда будет запущено Updatetime, он не планирует запускать его снова.