目次
概要
タイマー処理に関するVBAのTIPS。になればよいけどリンク集。
タイマー処理とは
タイマー処理は、一定時間間隔で処理を行う方法。
Application.OnTime メソッドを使用する方法と、WindowsAPIのSetTimerを使う方法がある。
Application.OnTime メソッド
- Application.OnTime メソッドは、指定された時刻 (特定の日時、または特定の期間の経過後) にプロシージャを実行するメソッド。
Application.OnTime(EarliestTime, Procedure, LatestTime, Schedule)Application.OnTime TimeValue("17:00:00"), "実行するプロシージャー名" ' 17時に実行 Application.OnTime Now + TimeSerial(0, 0, 5), "実行するプロシージャー名" ' 5秒後に実行 Application.OnTime Now + TimeValue("00:00:05"), "'sample2 ""時間ですよ""'" ' 引数を渡して、5秒後に実行
- 以下のように、OnTimeで自メソッドを呼び出すことで、定期実行をすることも可能。
Option Explicit Public mOnTime As Date Sub TimerProc() Range("A1") = Now() End Sub Sub OnTimeStart() Call TimerProc mOnTime = Now() + TimeSerial(0, 0, 1) Call Application.OnTime(mOnTime, "OnTimeStart") End Sub Sub OnTimeStop() '同一のProcedureとEarliestTimeがないとエラーになる On Error Resume Next Call Application.OnTime(mOnTime, "OnTimeStart", , False) End Sub
- 上記が実行されている間も、他のExcel作業は普通に行える。
- 上記のOnTimeStopプロシージャを呼び出すと、実行スケジュールを解除し(Falseを指定)、定期実行を終了する。
SetTimer(WindowsAPI)
- タイマー処理機能のWindowsAPI関数であるSetTimerを使用する方法。
上記OnTimeの定期処理の内容と同じことを行うには、以下のようになる。Option Explicit Public Declare PtrSafe Function SetTimer Lib "USER32" _ (ByVal hwnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As LongPtr) As Long Public Declare PtrSafe Function KillTimer Lib "USER32" _ (ByVal hwnd As Long, _ ByVal nIDEvent As Long) As Long Public mTimerID As Long Sub TimerProc() If mTimerID = 0 Then End '終了できない時の対策 On Error Resume Next 'デバッグ出すとExcelが固まるので Range("A1") = Now() End Sub Sub TimerStart() If mTimerID <> 0 Then MsgBox "起動済です。" Exit Sub End If mTimerID = SetTimer(0&, 1&, 1000&, AddressOf TimerProc) End Sub Sub TimerStop() Call KillTimer(0&, mTimerID) mTimerID = 0 End Sub
TIPS
別ページの一覧を入れる。
'IT系/VBA/基本/タイマー処理/' には、下位層のページがありません。
リンク集
重複を恐れないリンク集。
動画
- (モザイクアートチャンネル) PowerPoint VBA タイマーを作る①【Timer関数】 - YouTube
- (hoyahoyamachine) 瞬間VBA HIITタイマーをつくります その1 構成について - YouTube
- (馬鹿を目指すブチ抜ける) Timer関数 エクセルVBA - YouTube
- (なんだ!カンタン!Excel塾) VBAでタイマーを作る、Excel塾の効率アップマクロ編12回 - YouTube
- (ちらっとプログラム) VBA Excel スリープ 待機 コード プログラム(初級中級)[#0009] Programming to create the pause sleep between each action. - YouTube