Vba 秒表在更改其他单元格时无意中重置回 0
Vba Stopwatch unintendently resets back 0 when changing other cells
我的 Excel 电子表格中有一个 VBA 秒表,代码:
Public StopIt As Boolean
Public ResetIt As Boolean
Public LastTime
Private Sub CommandButton1_Click()
Dim StartTime, FinishTime, TotalTime, PauseTime
StopIt = False
ResetIt = False
If Range("C2") = 0 Then
StartTime = Timer
PauseTime = 0
LastTime = 0
Else
StartTime = 0
PauseTime = Timer
End If
StartIt:
DoEvents
If StopIt = True Then
LastTime = TotalTime
Exit Sub
Else
FinishTime = Timer
TotalTime = FinishTime - StartTime + LastTime - PauseTime
TTime = TotalTime * 100
HM = TTime Mod 100
TTime = TTime \ 100
hh = TTime \ 3600
TTime = TTime Mod 3600
MM = TTime \ 60
SS = TTime Mod 60
Range("C2").Value = Format(hh, "00") & ":" & Format(MM, "00") & ":" & Format(SS, "00") & "." & Format(HM, "00")
If ResetIt = True Then
Range("C2") = Format(0, "00") & ":" & Format(0, "00") & ":" & Format(0, "00") & "." & Format(0, "00")
LastTime = 0
PauseTime = 0
End
End If
GoTo StartIt
End If
End Sub
Private Sub CommandButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
StopIt = True
End Sub
Private Sub CommandButton3_Click()
Range("C2").Value = Format(0, "00") & ":" & Format(0, "00") & ":" & Format(0, "00") & "." & Format(0, "00")
LastTime = 0
ResetIt = True
End Sub
这个秒表工作正常。我的问题是,当我更改电子表格中的单元格或进行任何更改时,它会将秒表重置为“0”。
我希望它在整个会话期间 运行 因为我有其他单元格引用此计数器。
如有任何帮助,我们将不胜感激。我在寻找解决方案时找不到任何类似的问题。
谢谢
不确定您是否找到了解决方案,但我做了一些研究并且认为我知道为什么您的代码不起作用,并且可能有其他解决方案...如果可以接受...
当我通过启动计时器然后更改任何单元格来测试您的代码时,它不会重置为零,但会停止计时器。查看您的代码(可能来自 https://www.extendoffice.com/documents/excel/3684-excel-create-stopwatch.html),该代码仅适用于使用简单的计时器……没有别的。由于它在您停止之前永远不会放弃控制,因此它会占用大量处理器资源(看看任务管理器!)
我确实在 Stack VBA Macro On Timer style to run code every set number of seconds, i.e. 120 seconds 上找到了代码并使用了第二个答案(只是懒得在启动时使用第一个答案)。
您现在可以更改单元格,并且代码会继续 运行(在对单元格进行更改时 'pauses' 除外)。您可能不喜欢它按秒递增的事实,但也许其他人知道解决方案。
代码不在 sheet 模块中。
Option Explicit
Dim TimerActive As Boolean
Sub StartTimer()
Start_Timer
End Sub
Private Sub Start_Timer()
TimerActive = True
Application.OnTime Now() + TimeValue("00:00:01"), "Timer"
End Sub
Private Sub Stop_Timer()
TimerActive = False
End Sub
Private Sub Timer()
If TimerActive Then
Activesheet.Cells(2, 3).value = Time
Application.OnTime Now() + TimeValue("00:00:01"), "Timer"
End If
End Sub
我的 Excel 电子表格中有一个 VBA 秒表,代码:
Public StopIt As Boolean
Public ResetIt As Boolean
Public LastTime
Private Sub CommandButton1_Click()
Dim StartTime, FinishTime, TotalTime, PauseTime
StopIt = False
ResetIt = False
If Range("C2") = 0 Then
StartTime = Timer
PauseTime = 0
LastTime = 0
Else
StartTime = 0
PauseTime = Timer
End If
StartIt:
DoEvents
If StopIt = True Then
LastTime = TotalTime
Exit Sub
Else
FinishTime = Timer
TotalTime = FinishTime - StartTime + LastTime - PauseTime
TTime = TotalTime * 100
HM = TTime Mod 100
TTime = TTime \ 100
hh = TTime \ 3600
TTime = TTime Mod 3600
MM = TTime \ 60
SS = TTime Mod 60
Range("C2").Value = Format(hh, "00") & ":" & Format(MM, "00") & ":" & Format(SS, "00") & "." & Format(HM, "00")
If ResetIt = True Then
Range("C2") = Format(0, "00") & ":" & Format(0, "00") & ":" & Format(0, "00") & "." & Format(0, "00")
LastTime = 0
PauseTime = 0
End
End If
GoTo StartIt
End If
End Sub
Private Sub CommandButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
StopIt = True
End Sub
Private Sub CommandButton3_Click()
Range("C2").Value = Format(0, "00") & ":" & Format(0, "00") & ":" & Format(0, "00") & "." & Format(0, "00")
LastTime = 0
ResetIt = True
End Sub
这个秒表工作正常。我的问题是,当我更改电子表格中的单元格或进行任何更改时,它会将秒表重置为“0”。
我希望它在整个会话期间 运行 因为我有其他单元格引用此计数器。
如有任何帮助,我们将不胜感激。我在寻找解决方案时找不到任何类似的问题。
谢谢
不确定您是否找到了解决方案,但我做了一些研究并且认为我知道为什么您的代码不起作用,并且可能有其他解决方案...如果可以接受...
当我通过启动计时器然后更改任何单元格来测试您的代码时,它不会重置为零,但会停止计时器。查看您的代码(可能来自 https://www.extendoffice.com/documents/excel/3684-excel-create-stopwatch.html),该代码仅适用于使用简单的计时器……没有别的。由于它在您停止之前永远不会放弃控制,因此它会占用大量处理器资源(看看任务管理器!)
我确实在 Stack VBA Macro On Timer style to run code every set number of seconds, i.e. 120 seconds 上找到了代码并使用了第二个答案(只是懒得在启动时使用第一个答案)。
您现在可以更改单元格,并且代码会继续 运行(在对单元格进行更改时 'pauses' 除外)。您可能不喜欢它按秒递增的事实,但也许其他人知道解决方案。
代码不在 sheet 模块中。
Option Explicit
Dim TimerActive As Boolean
Sub StartTimer()
Start_Timer
End Sub
Private Sub Start_Timer()
TimerActive = True
Application.OnTime Now() + TimeValue("00:00:01"), "Timer"
End Sub
Private Sub Stop_Timer()
TimerActive = False
End Sub
Private Sub Timer()
If TimerActive Then
Activesheet.Cells(2, 3).value = Time
Application.OnTime Now() + TimeValue("00:00:01"), "Timer"
End If
End Sub