Спящий режим VBA не работает

Я знаю, что я делаю что-то не так. Я пытаюсь использовать функцию сна для задержки моего кода, но я получаю ошибку "Sub или Function not defined". Любые советы?

Ответ 1

У VBA нет функции Sleep.

Вы можете импортировать его из Kernel32.dll следующим образом:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Обратите внимание, что это заморозит приложение.
Вы также можете вызвать DoEvents в цикле While, который не будет заморозить приложение.

Ответ 2

Все, что я пробовал, похоже, повесил приложение, в том числе Application.Wait. Кажется, что это работает:

waitTill = Now() + TimeValue("00:15:00")

While Now() < waitTill
    DoEvents
Wend

Ответ 3

Вы также можете приостановить текущий контекст макроса с помощью Application.Wait T, который не будет блокировать весь процесс.

Ответ 4

Application.Wait DateAdd("m", 10, Now) ' Wait for 10 Minutes
 Application.Wait DateAdd("s", 10, Now) ' wait for 10 seconds

Ответ 5

С этим кодом Excel не зависает, а загрузка процессора низкая:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Delay(s As Single)
    Dim TimeOut As Single
    TimeOut = Timer + s
    Do While Timer < TimeOut
        DoEvents
        Sleep 1 'With this line the CPU usage is 00 instead of 50 with an absolute error of +1ms and the latency of 1ms.
    Loop
End Sub

Ответ 6

Pausing an application for 10 seconds.

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