2011年12月26日月曜日

[ExcelVBA] Sleep

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

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

■サンプルコード
  1. Option Explicit  
  2.   
  3. Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)  
  4. Sub SampleCode()  
  5.     Dim i As Integer  
  6.     For i = 1 To 10  
  7.         Debug.Print (i)  
  8.         Sleep (1000) 'ミリ秒単位で指定 1秒停止  
  9.     Next  
  10. End Sub  


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

0 件のコメント: