Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 一张纸上有多个计时器_Vba_Excel_Timer - Fatal编程技术网

Vba 一张纸上有多个计时器

Vba 一张纸上有多个计时器,vba,excel,timer,Vba,Excel,Timer,修改[中途] 谢谢你,YowE3K,在你的评论之后,代码已经被修改了,但是它并没有像它应该的那样工作。。。 两个计时器都独立运行,但只有在它们单独运行时才能正常运行。就在我让两个人都开始行动的那一刻,他们开始每2秒计算一次,而不是应该的每2秒计算一次。我知道这可能与“Application.OnTime SchdTime+OneSec”,Sheet1.setImmediate这一部分有关,但我不知道如何在这里指定单元格。目前,它们在一起时会在Sheet1上增加一秒钟 此外,重新打开文档后从00:

修改[中途] 谢谢你,YowE3K,在你的评论之后,代码已经被修改了,但是它并没有像它应该的那样工作。。。 两个计时器都独立运行,但只有在它们单独运行时才能正常运行。就在我让两个人都开始行动的那一刻,他们开始每2秒计算一次,而不是应该的每2秒计算一次。我知道这可能与“Application.OnTime SchdTime+OneSec”,Sheet1.setImmediate这一部分有关,但我不知道如何在这里指定单元格。目前,它们在一起时会在Sheet1上增加一秒钟

此外,重新打开文档后从00:00:00开始计时的问题仍然存在

以下是代码-请注意,此代码用于切换按钮:

Dim StopTimer           As Boolean
Dim SchdTime            As Date
Dim Etime               As Date
Dim SchdTime2           As Date
Dim Etime2              As Date
Const OneSec            As Date = 1 / 86400#
Private Sub Start_Stop_1_Click()
If Start_Stop_1 = True Then
StopTimer = False
SchdTime = Now()
[K3].Value = Format(Etime, "hh:mm:ss")
Application.OnTime SchdTime + OneSec, "Sheet1.setImmediate"
Else
StopTimer = True
Beep
End If
End Sub
Private Sub Start_Stop_2_Click()
If Start_Stop_2 = True Then
StopTimer = False
SchdTime2 = Now()
[K4].Value = Format(Etime2, "hh:mm:ss")
Application.OnTime SchdTime2 + OneSec, "Sheet1.setImmediate"
Else
StopTimer = True
Beep
End If
End Sub
Sub setImmediate()
If Start_Stop_1 = True Then
[K3].Value = Format(Etime, "hh:mm:ss")
SchdTime = SchdTime + OneSec
Application.OnTime SchdTime, "Sheet1.setImmediate"
Etime = Etime + OneSec
Else: StopTimer = True
'Don't reschedule update
End If
If Start_Stop_2 = True Then
[K4].Value = Format(Etime2, "hh:mm:ss")
SchdTime2 = SchdTime2 + OneSec
Application.OnTime SchdTime2, "Sheet1.setImmediate"
Etime2 = Etime2 + OneSec
Else: StopTimer = True
'Don't reschedule update
End If
End Sub

只是一个初步猜测,但可能是您的
应用程序。对
setImmediate
的OnTime
调用正在重写另一个调用?即,一旦一个被调度,您就不能同时调度另一个。第二个计时器的代码在一个
If
语句中,该语句检查第一个计时器是否正在运行。谢谢!我已经完成了slide修改,现在两个计时器都可以独立运行。但是现在还有两个问题:)当我在某个计数时停止它们(假设第一个在00:04:30,第二个在00:00:20),如果我再次启动第二个-从00:04:30开始…当再次启动时,任何一个都会从这两个值中获取最高值。我更愿意让它们从各自的最后一个值开始运行。当我保存文档并再次打开它时,最后一个计数值是可见的,但是当我单击“再次启动”时,如果您愿意,它会从00:00开始将它们的值分开,使用单独的变量-不要同时使用
SchdTime
ETime
。如果您需要初始化这些值,您可能可以在第一次启动计时器时进行初始化。还有一个单独的变量,计时器现在可以正常工作,但当两者都“打开”时“他们开始计算两秒,而不是应该的1秒。您认为应该修复“Application.OnTime SchdTime,“Sheet1.setImmediate”部分吗?如果是,我如何指定位置?当我尝试更改此部分时,它会给我一个错误。。。