VBA - 难以中断Application.OnTime

时间:2017-08-09 07:55:49

标签: vba excel-vba excel

我很难打断循环Application.OnTime命令。我有一个宏我想定期每5秒循环一次(CommandButton221),但我希望能够通过按StopButton来关闭循环。

Private Sub CommandButton221_Click()
    If StopMacro = True Then Exit Sub
    '[Code that I want looping, not relevant to the question]
    testup1
End Sub

Public Sub testup1()
    RunWhen = Now + TimeValue("00:00:05")
    Application.OnTime RunWhen, "CommandButton221_Click", , True
End Sub

Public Sub StopButton_Click()
    StopMacro = True
End Sub

如何实现这一目标的任何建议都将非常感激!

2 个答案:

答案 0 :(得分:0)

这应该这样做,一个略微不同的方法,在点击“停止”按钮时完全删除计划:

Public RunWhen As Double

Private Sub CommandButton221_Click()
    Application.StatusBar = Now()
    testup1
End Sub

Public Sub testup1()
    RunWhen = Now + TimeValue("00:00:05")
    Application.OnTime RunWhen, "CommandButton221_Click", , True
End Sub

Public Sub StopButton_Click()
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:="CommandButton221_Click", Schedule:=False
End Sub

确保221中的代码运行时间不超过5秒!

答案 1 :(得分:-1)

尝试在testup1()末尾使用命令DoEvents将控制权返回给O.S.,这应该允许发生停止按钮事件。 VBA很容易陷入带有定时器和/或大量数据处理的循环中,并忽略其他事件。