指定した時刻にマクロを実行する(OnTimeメソッド)|Excel VBA |
オフィスなどで仕事をしていて、12時になったら出かけなければならないとします。
それまではExcelで作業を続けるのなら、時間になったことをExcelが教えてくれたら便利ですね。
Excelには、指定した時刻に指定したマクロを実行する機能がありますので、それを使えば簡単なスケジュール管理に応用できるかもしれません。
指定した時刻にマクロを実行するには、ApplicationオブジェクトのOnTimeメソッドを使います。OnTimeメソッドの書式は次の通りです。
構文 Object.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
設定項目 | 内容 |
---|---|
Object | Applicationオブジェクト |
EarliestTime | マクロを実行する時刻を指定 |
Procedure | 指定した時刻に実行するプロシージャ名を指定 |
LatestTime | プロシージャを実行する最終時刻を指定 [省略可能] |
Schedule | OnTimeメソッドの設定を有効にする(True:既定値)、無効にする(False) [省略可能] |
まず、指定した時刻に実行するマクロを作成します。
Sub Test()
MsgBox "時間です"
End Sub
次に、次のマクロを実行します。
Sub Sample1()
Application.OnTime EarliestTime:=TimeValue("11:58:00"), Procedure:="Test"
End Sub
これでスケジュールが有効になりましたので、普通にExcelで作業を続けます。
指定した時刻になると「時間です」というメッセージが表示されます。
指定した時刻にほかのマクロが起動していると、OnTimeメソッドで指定したマクロを実行できません。引数LatestTimeを指定するとその時刻まで実行を待ち、それまでに実行できなければマクロの実行はキャンセルされます。引数LatestTimeを省略するといつまでも待ち続けます。
OnTimeメソッドで設定したスケジュールが有効になるのは、OnTimeメソッドを実行したブックがExcel上で開かれている間です。もちろん、Excelを再起動すると、スケジュールは無効になります。
複数のスケジュールを設定することもできます。
また、スケジュールを解除するには、引数ScheduleにFalseを指定します。このとき、引数EarliestTimeとProfedureに解除したいスケジュールのプロシージャ名と時刻を指定します。
存在しないスケジュールを指定した場合はエラーになります。
セルA1:A3に「hh:mm:ss」の形式で時刻が設定されているとします。
次のサンプルでは、3つのスケジュールを設定した後、2つめのスケジュールをキャンセルしているので、「1つめ 時刻」「3つめ 時刻」のメッセージボックスが表示されます。
Sub AlermSample()
'3つのスケジュールを設定
Application.OnTime EarliestTime:=Range("A1").Value, _
Procedure:="'EchoTime ""1""'"
Application.OnTime EarliestTime:=Range("A2").Value, _
Procedure:="'EchoTime ""2""'"
Application.OnTime EarliestTime:=Range("A3").Value, _
Procedure:="'EchoTime ""3""'"
'2つめのスケジュールをキャンセル
Application.OnTime EarliestTime:=Range("A2").Value, _
Procedure:="'EchoTime ""2""'", _
Schedule:=False
End Sub
Sub EchoTime(n As Long)
MsgBox n & "つめ" & vbTab & Time
End Sub