gpt4 book ai didi

VBA:我如何真正停止 Application.onTime()?

转载 作者:行者123 更新时间:2023-12-01 02:42:28 24 4
gpt4 key购买 nike

我已经阅读了一些关于如何停止 VBA Application.OnTime 的问题/线程(例如 thisthis )程序,但我就是无法停止!
我用它每 x 秒提取一些数据。我明白当我调用 OnTime()方法我需要将用于安排事件的相同时间值传递给它。
我还尝试引入多个命令(例如试图导致错误)来停止执行,但它仍然不起作用!该程序一直在运行......这就是我的代码的样子:
在工作表代码中,我有:

Public TimerActive As Boolean
Public tick As String
Public idx As Long
Public counter As Long

Public Sub UpdateOff_Click()

TimerActive = False
tick = "Off"
counter = 1
idx = 1

Call StopTimer(idx, counter, tick, TimerActive)
End ' force quit??

End Sub

Public Sub UpdateOn_Click()

TimerActive = True
tick = "live"
counter = 1
idx = 1

Call StartTimer(idx, counter, tick, TimerActive)

End Sub
在一个单独的模块中,我有:
Public fireTime As Date

Sub StartTimer(ByVal idx As Long, ByVal counter As Long, ByVal tick As String, ByVal TimerActive As Boolean)

fireTime = Now + TimeValue("00:00:05")
sMacro = " 'pullData " & idx & " , " & counter & ", " & Chr(34) & tick & Chr(34) & ", " & TimerActive & "'"
Application.OnTime EarliestTime:=fireTime, Procedure:=sMacro, Schedule:=True

End Sub

Sub StopTimer(ByVal idx As Long, ByVal counter As Long, ByVal tick As String, ByVal TimerActive As Boolean)

sMacro = "cause error" ' cause an error (by giving false sub name so program stops?

Application.OnTime EarliestTime:=fireTime, Procedure:=sMacro, Schedule:=False
End

End Sub


Public Sub pullData(ByVal idx As Long, ByVal counter As Long, ByVal tick As String, ByVal TimerActive As Boolean)
DoEvents
If TimerActive = True Then

' pull the data do some stuff, print the data, etc...

idx = idx + 1
counter = counter + 1
tick = tick + " ."
If counter = 6 Then
counter = 1
tick = "live"
End If

Call startTimer(idx, counter, tick, TimerActive)

End If

End Sub
我知道我可能已经引入了一些额外的措施来停止执行,但似乎没有一个有效!

最佳答案

这是因为您的启动和停止例程指的是不同的宏。将 sMacro 定义为 Public,然后它将起作用

Public sMacro As String
Public fireTime As Date

Sub startTimer(ByVal idx As Long, ByVal counter As Long, ByVal tick As String, ByVal TimerActive As Boolean)
fireTime = Now + TimeValue("00:00:05")
sMacro = " 'pullData " & idx & " , " & counter & ", " & Chr(34) & tick & Chr(34) & ", " & TimerActive & "'"
Application.OnTime EarliestTime:=fireTime, Procedure:=sMacro, Schedule:=True
End Sub

Sub StopTimer(ByVal idx As Long, ByVal counter As Long, ByVal tick As String, ByVal TimerActive As Boolean)
Application.OnTime EarliestTime:=fireTime, Procedure:=sMacro, Schedule:=False
End Sub

关于VBA:我如何真正停止 Application.onTime()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com