指定した時刻にマクロを実行します。
●詳細●
何かの処理のタイミングを見計らって処理を行いたい場合に使用します。
構文 Object.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
設定項目 内容
Object Applicationオブジェクト [省略不可]
EarliestTime 行する時刻を指定 [省略不可]
Procedure 実行するマクロ名を文字列で指定 [省略不可]
LatestTime マクロ実行まで待機する最終時刻を指定 [省略可能]
Schedule Trueで新しいをマクロを設定(既定値)
Falseで前の設定を解除 [省略可能]
次のサンプル1は、現在時刻から20秒後に時間を表示するマクロを実行します。
●サンプル1●
Sub OnTimeSamp1()
Application.OnTime EarliestTime:=Now + TimeValue("00:00:20") _
, Procedure:="OnTimeTest", LatestTime:=Now + TimeValue("00:00:25")
'---現在時刻から20秒後に マクロ OnTimeTest を実行します
'---実行できない場合には現在時刻から25秒後まで待機します
Range("A1").Value = Format(Now + TimeValue("00:00:20"), "hh:mm:ss") & _
"に処理を実行します"
End Sub
現在時刻からの経過時間を指定する場合、サンプルのように、Now関数とTimeValue関数を使用します。呼び出されるマクロ「OnTimeTest」は次のような内容です。
●サンプル2●
Sub OnTimeTest()
MsgBox "現在時刻は" & Format(Now, "hh:mm:ss")
End Sub
サンプル1でセルA1に入力されたスケジュールどおりにサンプル2が実行されていることを確認してください。
サンプルコードを実行すればわかりますが、指定された時刻になるまで、ユーザーは通常どおりにExcelを操作することができます。したがって、指定された時刻に何らかの処理中であるため、マクロを実行できないケースが発生します。このような場合に、マクロの実行を待機する最終時刻の設定を引数LatestTimeで行っています。この時刻を経過した場合にはマクロは実行されません。省略した場合には、マクロが実行できるようになるまで待機しつづけます。
●ポイント●
スケジュールしたマクロの実行を中止したい場合には、引数ScheduleにFalseを指定します。この場合、引数EarliestTime/Procedureで実行を中止するマクロを特定しますので、実行の中止の可能性がある場合には、引数EarliestTimeを特定できるようにしてください。