web-dev-qa-db-ja.com

VBAスリープが機能しない

私はここで何か間違ったことをしていることを知っています。スリープ機能を使用してコードを遅延させようとしていますが、「サブルーチンまたは関数が定義されていません」というエラーが表示されます。任意のヒント?

16
sooprise

VBAにはSleep関数がありません。

次のようにKernel32.dllからインポートできます。

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

これにより、アプリケーションがフリーズすることに注意してください。
DoEventsループでWhileを呼び出すこともできます。これにより、アプリケーションがフリーズすることはありません。

21
SLaks

Application.Waitを含め、私が試したすべてがアプリケーションをハングさせているようです。これはうまくいくようです:

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

While Now() < waitTill
    DoEvents
Wend
11
Anthony Hayward

Application.Wait T を使用して現在のマクロコンテキストを一時停止することもできます。これにより、プロセス全体がブロックされることはありません。

8
Alex K.
Application.Wait DateAdd("m", 10, Now) ' Wait for 10 Minutes
 Application.Wait DateAdd("s", 10, Now) ' wait for 10 seconds
4
Babu

このコードを使用すると、Excelがフリーズせず、CPU使用率が低くなります。

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
0

アプリケーションを10秒間一時停止します。

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