使用 VBA 在 Excel 中构建倒数计时器时出现问题

Problem with building count down timer in Excel using VBA

我正在尝试使用 VBA 构建一个倒数计时器,结果可以动态输出到 Excel 单元格。我让过程 abc 和 def 递归地相互调用(没有设置停止点只是为了测试),它起作用了。然而,后来我再次使用完全相同的代码 运行,它失败了,错误消息是:

Code execution has been interrupted.

就是想不通为什么,我什么都没改,怎么会运行然后就失效了?

我试过On Error Resume NextApplication.DisplayAlert = False,两者都没有停止弹出的错误消息和代码执行的中断。如果我逐步完成这些程序,似乎没问题...

我还想在另一个单元格的评论中添加动态文本,如 "start in how many seconds"。可以这样实现吗?

谢谢!

Sub abc()

    [a1] = [a1] - 1
    ' [a2] = "Start in " & [a1] & " seconds."
    Call def

End Sub


Sub def()

    Application.Wait (Now + TimeValue("0:00:01"))

    Call abc

End Sub

你的整个代码对我来说工作正常(也包括 [a2] 部分)。我在 Windows 7 和 Excel 2013.

我建议你在 abc() 中添加一个停止条件,比如

If [a1] > 0 Then
   Call def
End If

请提供更多信息。

为什么不顺便创建一个函数?它对你有用吗?

Function wait(seconds As Long)

    Dim originalStatusBar As String, i As Long
    originalStatusBar = Application.StatusBar

    For i = seconds To 0 Step -1
        Application.wait (Now + TimeValue("0:00:01"))
        Application.StatusBar = "Start in " & i & " seconds"
    Next

    Application.StatusBar = originalStatusBar

End Function

然后在你的子程序中,你可以这样称呼它:

wait 5 'waits 5 seconds and updates status bar with remaining time

wait [a1]-1

考虑到调用堆栈的问题,我不会尝试递归地执行此操作,而是使用 Application.OnTime.

Sub Button1_Click()
    Call MyTimer

End Sub

Sub MyTimer()
    [a1] = [a1] - 1

    Application.OnTime Now + TimeValue("00:00:01"), "MyTimer"
End Sub

我想这在某种程度上仍然是 'recursive',但程序每次都会退出。仅在 1 秒后才再次执行该过程。

但是,无论哪种方式,您都应该包括一些停止进程的方法。例如,

Sub MyTimer()
    [a1] = [a1] - 1

    If [a1] > 0 Then
        Application.OnTime Now + TimeValue("00:00:01"), "MyTimer"
    End If
End Sub