excel 延迟宏以允许事件完成

hmmo2u0o  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(164)

在尝试从宏中访问外部API函数集时,我发现有必要添加延迟,以便外部API有时间处理选择。
实现这一点会带来一些困难,因为使用Application.Wait或Application.Sleep无法工作。
在网上搜索让我尝试使用GetTickCount或timeGetTime -这两种方法都对我不起作用,因为延迟函数无法退出。
因此,问题是我如何才能实现这一点?

g6baxovj

g6baxovj1#

相反,我使用函数Now和DateAdd实现了延迟:

Function Delay(Seconds As Long)
    Dim StopTime As Date: StopTime = DateAdd("s", Seconds, Now)
    Do While Now < StopTime
        DoEvents
    Loop
End Function

更新如下以获得毫秒精度

Function Delay(Seconds As Double)
    Dim StopTime As Double: StopTime = Timer + Seconds
    Do While Timer < StopTime
        DoEvents
    Loop
End Function

对于异步事件,以下可能有效,但目前尚未测试

Function DelayForAsync()
    Dim CalculationState As Long
    With Application
        CalculationState = .Calculation
        .Calculation = xlCalculationAutomatic
        .CalculateUntilAsyncQueriesDone
        Do Until .CalculationState = xlDone
            DoEvents
        Loop
        .Calculation = CalculationState
    End With
End Function

相关问题