Excel 在VBA中循环移动到下一个迭代之前,调用sub未完成

Excel 在VBA中循环移动到下一个迭代之前,调用sub未完成,excel,vba,call,countdown,Excel,Vba,Call,Countdown,我正在写一段VBA代码来显示一个倒计时计时器。Excel表1列出了事件的时间和描述,表2显示了倒计时 想法是,一旦第一个事件成功倒计时,它会检查第二个事件的日期,如果是今天,它会继续倒计时到第二个事件,依此类推。倒计时特性第一次成功地工作并进行了描述,但当它完成对第一个事件的倒计时时,它将完全停止 共有3个sub,第一个用于计算事件是否在今天以及需要倒计时多长时间。第一个调用第二个,第二个通过减去时间序列(0,0,1)进行倒计时,第三个是计时器。我承认我从网上找到的一篇写得很好的文章中借用了第二

我正在写一段VBA代码来显示一个倒计时计时器。Excel表1列出了事件的时间和描述,表2显示了倒计时

想法是,一旦第一个事件成功倒计时,它会检查第二个事件的日期,如果是今天,它会继续倒计时到第二个事件,依此类推。倒计时特性第一次成功地工作并进行了描述,但当它完成对第一个事件的倒计时时,它将完全停止

共有3个sub,第一个用于计算事件是否在今天以及需要倒计时多长时间。第一个调用第二个,第二个通过减去
时间序列(0,0,1)
进行倒计时,第三个是计时器。我承认我从网上找到的一篇写得很好的文章中借用了第二篇和第三篇(感谢写这篇文章的人)

我简化了我在下面写的内容:

用于i=1到10
确定是否应发生倒计时的If*条件存在*
*计算倒计时时间并将其设置为工作表(“倒计时”)。单元格(“A13”)*
单元格(13,1)=总时间倒计时
呼叫倒计时
如果结束
接下来我
Sub Countdowntimer()
工作表(“倒计时”)。激活
变暗计数器作为量程
设置计数器=ActiveSheet.Range(“A13”)
如果计数器值>0,则
Counter.Value=Counter.Value-TimeSerial(0,0,1)
查看通话时间

ElseIf Counter.Value问题在于使用
Application.OnTime
,对于倒计时计时器,使用
Do
循环和
DoEvents
倒计时

诸如此类:

Option Explicit

Public Sub CountDownTimer()
    With ThisWorkbook.Worksheets("Countdown")
        Dim Duration As Long
        Duration = 10 ' needs to be in seconds!
        'if your cell has a real datetime then use
        Duration = .Range("A13").Value * 24 * 60 * 60

        Dim TimerStart As Double
        TimerStart = Timer()

        Do While Timer <= TimerStart + Duration
            .Range("A13").Value = TimeSerial(0, 0, TimerStart + Duration - Timer)
            DoEvents
        Loop

        ThisWorkbook.Worksheets("Countdown").Range("A13:H17").ClearContents
    End With
End Sub
选项显式
公共子倒计时()
使用此工作簿。工作表(“倒计时”)
暗淡的持续时间一样长
持续时间=10'需要以秒为单位!
'如果您的手机具有实时日期时间,则使用
持续时间=.范围(“A13”).值*24*60*60
Dim Timer启动为双精度
TimerStart=Timer()

谢谢你的帮助。你能解释一下为什么在这种情况下,
应用程序.OnTime
不起作用吗?@jen因为它会注册,Excel应该在特定时间运行宏。在此之前,当前宏将继续处理,并在运行
OnTime
宏时再次停止。它将运行marcro,然后,它将继续暂停的宏。这种行为是由于VBA不支持多线程。一次只能运行一个宏。不可能同时运行两个宏。•我使用的循环会一直循环直到时间结束。因此,您的另一个宏在此期间暂停。