使用睡眠功能但允许输入结束宏?

Use sleep function but allow for input to end macro?

我有一个循环的宏,并在每次循环后的 5 秒到 120 秒之间的随机间隔内使用睡眠功能。当宏在进行操作后进入休眠状态时,我无法在不使用控制中断的情况下结束宏,而控制中断似乎间歇性地工作。所以我的问题是这样的。我将如何让宏休眠任意时间,但又能在休眠期间随时终止宏而不中断控制?

排队暂停的另一种方法是使用Application.OnTime ...

Public Sub PauseInBackground()
    Dim lngSeconds As Long, strNextTime As String
    
    Randomize (Second(Time))
    lngSeconds = Rnd() * 120
    
    strNextTime = Format(DateAdd("s", lngSeconds, DateValue("01/01/1800")), "hh:mm:ss")

    Debug.Print "Next Time = " & strNextTime
    
    Application.OnTime Now + TimeValue(strNextTime), "RoutineToRun"
End Sub

Public Sub RoutineToRun()
    Debug.Print "Now = " & Now()
    
    ' Your code/logic
    
    PauseInBackground
End Sub

...它不会暂停宏。

https://docs.microsoft.com/en-us/office/vba/api/excel.application.ontime