サンプルを起動させ、上の「Sleepのサンプル」ボタンをクリックすると起動します。
(この画像をクリックすると、このページのサンプルがダウンロードができます。)
すると、1秒ずつステータスバーに表示されるようになります。この1秒のインターバルをAPIで処理していますが、インターバルを「ミリ秒」で指定するだけの一番簡単なAPIです。
止める時は、Escキーを押して下さい。
Escキーが押されると、中断確認メッセージが表示されます。
ここで、「はい」をクリックすれば終了、「いいえ」をクリックすれば、また秒カウントを継続します。
ソースコードです。
'***************************************************************************************************
' スリープ
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容---------------------------------------------------------------------->
' 07/07/15(1.0.0)新規作成
' 17/12/30(1.1.0)再作成
' 19/10/20(2.0.0)64ビットWindows対応、他
'***************************************************************************************************
Option Explicit
'---------------------------------------------------------------------------------------------------
#If VBA7 Then
' ■スリープ(API)
Private Declare PtrSafe Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)
#Else
' ■スリープ(API)
Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)
#End If
'***************************************************************************************************
'* 処理名 :Button1_Click
'* 機能 :シート上のボタン押下
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2007年07月15日
'* 作成者 :井上 治
'* 更新日 :2019年10月20日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub Button1_Click()
'-----------------------------------------------------------------------------------------------
Dim lngCOUNT As Long
' EscキーでErrorHandlerへ進ませる
Application.EnableCancelKey = xlErrorHandler
On Error GoTo ESC_CHATCH
'-----------------------------------------------------------------------------------------------
' 中断されるまで繰り返す(無限ループ記述)
Do
' カウントをステータスバーに表示
lngCOUNT = lngCOUNT + 1
Application.StatusBar = CStr(lngCOUNT)
' 1秒WAIT(SleepAPI)
DoEvents
Sleep 1000 ' 1000msec
Loop
' 終了
GoTo LOOP_EXIT
'===================================================================================================
' Escキー押下時の処理
ESC_CHATCH:
' Escキー打鍵によるものか
If Err.Number = 18 Then
' 中断キー押下時の確認メッセージ
If MsgBox("中断キーが押されました。終了しますか?", vbInformation + vbYesNo) <> vbYes Then
' 中断箇所に戻る
Resume
End If
Else
' その他のエラー
MsgBox Err.Description, vbCritical
End If
'===================================================================================================
' 終了処理
LOOP_EXIT:
' Escキー処理を戻す
Application.EnableCancelKey = xlInterrupt
Application.StatusBar = False
On Error GoTo 0
End Sub
'------------------------------------------<< End of Source >>--------------------------------------
'***************************************************************************************************
' スリープ②
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容---------------------------------------------------------------------->
' 17/12/30(1.0.0)新規作成(GoTo記述無し)
' 19/10/20(2.0.0)64ビットWindows対応
'***************************************************************************************************
Option Explicit
'---------------------------------------------------------------------------------------------------
#If VBA7 Then
' ■スリープ(API)
Private Declare PtrSafe Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)
#Else
' ■スリープ(API)
Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)
#End If
'***************************************************************************************************
'* 処理名 :Button1_Click
'* 機能 :シート上のボタン押下
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2017年12月30日
'* 作成者 :井上 治
'* 更新日 :2017年12月30日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub Button1_Click()
'-----------------------------------------------------------------------------------------------
Dim lngCOUNT As Long
' EscキーでErrorHandlerへ進ませる
Application.EnableCancelKey = xlErrorHandler
On Error Resume Next
'===============================================================================================
' 中断されるまで繰り返す(無限ループ記述)
Do
' カウントをステータスバーに表示
lngCOUNT = lngCOUNT + 1
Application.StatusBar = CStr(lngCOUNT)
'DoEvents
' エラー確認
If Err.Number <> 0 Then
' Escキー打鍵によるものか
If Err.Number = 18 Then
' 中断キー押下時の確認メッセージ
If MsgBox("中断キーが押されました。終了しますか?", vbInformation + vbYesNo) = vbYes Then
Exit Do
End If
Else
MsgBox Err.Description, vbCritical
Exit Do
End If
End If
' 1秒WAIT(SleepAPI)
Sleep 1000 ' 1000msec
Loop
'===============================================================================================
' 終了
Application.EnableCancelKey = xlInterrupt
Application.StatusBar = False
On Error GoTo 0
End Sub
'------------------------------------------<< End of Source >>--------------------------------------