2011年12月26日月曜日

[ExcelVBA] Sleep

 
■説明
スレッドの実行を指定の時間だけ中断する

■宣言
Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)

■サンプルコード
Option Explicit

Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Sub SampleCode()
    Dim i As Integer
    For i = 1 To 10
        Debug.Print (i)
        Sleep (1000) 'ミリ秒単位で指定 1秒停止
    Next
End Sub


ExcelVBAで一定時間処理を停止させる方法としてループ内でTimer関数やWait関数を用いるパターンがありますが、この場合ExcelVBAは処理し続けているのでCPU使用量がかなり高い状態となります。他のファイルを開くのに開ききるまで待とうとしてもExcel側でCPUを占有しているためなかなかうまくいかないといったことになります。
よって一定時間処理を停止させたい時は、WindowsAPIのSleep関数を使うのが一番よいですね。
 

0 件のコメント: