【VBA】Application.OnTime で指定時刻にマクロを実行

【VBA】Application.OnTime

 Application.OnTime メソッドを使うと 指定した時刻にマクロを実行させることができます。こばとの作ったマクロで OnTime メソッドを試してみましょう。

'[VBA] Application.OnTimeのサンプルコード

'メッセージを表示するサブルーチン
Sub Message()
  Dim mymsg As String
  mymsg = "あとりえこばとをよろしく"
  MsgBox (mymsg)
End Sub

'13:30にMessageを起動するサブルーチン
Sub Ontime_Test1()
  Application.OnTime TimeValue("13:30:00"), "Message"
End Sub

 予め Message というマクロを作ってあります。Message は「あとりえこばとをよろしく!」というメッセージを表示させるマクロです。Ontime_Test1() のほうの中身は1行だけです:

Application.OnTime TimeValue(“13:30:00”), “Message”

 OnTime メソッドの引数には時刻と動かすマクロを指定しています。つまり、13 時 30 分きっかりに Message マクロが起動して「あとりえこばとをよろしく!」というメッセージが表示されることになります。皆さんは今から数分後ぐらいの時刻を指定して、実際に表示されるかどうか確認してみてください。あるいは

Application.OnTime Now + TimeValue(“00:00:5”), “Message”

というように書き換えると、現在の(マクロを実行したときの)時刻から数えて 5 秒後に「あとりえこばとをよろしく!」が表示されることになります。

 ちなみに、ここで使用している Now は現在の日付を取得する関数、TimeValue は特定時刻を指定する関数です。

 あ、そうそう。スケジュールが有効なのは、上のマクロが記述されているブックが開いているときだけです。閉じてるときには何も起こりません。ていうかさ、そうでなかったら怖いじゃん? Excel とか全然使ってないときに、いきなり画面に
「あとりえこばとをよろしく!」
なんてメッセージが現れたら、コンピュータウィルスにでもやられたのかと思うじゃん?
 
 ま、そんな話はさておいて、Application.OnTime の書式も載せておきます。

OnTime(EarliestTime, Procedure, LatestTime, Schedule)

 英語で書いてあると分かりにくいかもしれないので、引数を日本語に直しておきます(直訳でなく、意味がわかりやすいようにしてあります)。

OnTime(実行時刻, 実行マクロ, 待ち時間, スケジュール)

 最初の 2 つの引数は上で説明した通りです。

 [待ち時間] は、指定した時刻に他のマクロが起動していたときに「これだけの時間は待ちますよ」というものです。

 [スケジュール] は、省略するか True にしておくと、設定した起動スケジュールが有効になるというものです。False なら無効になります。無効にするなら、最初からこんなメソッド使わなきゃいいわけで、普通はあまり使う機会もないと思うけど、この引数を変数にしておいて、条件によってスケジュールの有効/無効を切り替えるような複雑なマクロ(ゲームとか?)を作る時に使うのかもしれません。あ、そうだ。もし VBA でゲーム作ってる強者がいたら教えてくださいな。そんで、そのファイル送って。こばとが遊ぶから。

コメント

タイトルとURLをコピーしました