私はここで何か間違ったことをしていることを知っています。スリープ機能を使用してコードを遅延させようとしていますが、「サブルーチンまたは関数が定義されていません」というエラーが表示されます。任意のヒント?
VBAにはSleep
関数がありません。
次のようにKernel32.dllからインポートできます。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
これにより、アプリケーションがフリーズすることに注意してください。DoEvents
ループでWhile
を呼び出すこともできます。これにより、アプリケーションがフリーズすることはありません。
Application.Waitを含め、私が試したすべてがアプリケーションをハングさせているようです。これはうまくいくようです:
waitTill = Now() + TimeValue("00:15:00")
While Now() < waitTill
DoEvents
Wend
Application.Wait T
を使用して現在のマクロコンテキストを一時停止することもできます。これにより、プロセス全体がブロックされることはありません。
Application.Wait DateAdd("m", 10, Now) ' Wait for 10 Minutes
Application.Wait DateAdd("s", 10, Now) ' wait for 10 seconds
このコードを使用すると、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
アプリケーションを10秒間一時停止します。
Application.Wait (Now + TimeValue("0:00:10"))