【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行だけです:
OnTime メソッドの引数には時刻と動かすマクロを指定しています。つまり、13 時 30 分きっかりに Message マクロが起動して「あとりえこばとをよろしく!」というメッセージが表示されることになります。皆さんは今から数分後ぐらいの時刻を指定して、実際に表示されるかどうか確認してみてください。あるいは
というように書き換えると、現在の(マクロを実行したときの)時刻から数えて 5 秒後に「あとりえこばとをよろしく!」が表示されることになります。
ちなみに、ここで使用している Now は現在の日付を取得する関数、TimeValue は特定時刻を指定する関数です。
あ、そうそう。スケジュールが有効なのは、上のマクロが記述されているブックが開いているときだけです。閉じてるときには何も起こりません。ていうかさ、そうでなかったら怖いじゃん? Excel とか全然使ってないときに、いきなり画面に
「あとりえこばとをよろしく!」
なんてメッセージが現れたら、コンピュータウィルスにでもやられたのかと思うじゃん?
ま、そんな話はさておいて、Application.OnTime の書式も載せておきます。
英語で書いてあると分かりにくいかもしれないので、引数を日本語に直しておきます(直訳でなく、意味がわかりやすいようにしてあります)。
最初の 2 つの引数は上で説明した通りです。
[待ち時間] は、指定した時刻に他のマクロが起動していたときに「これだけの時間は待ちますよ」というものです。
[スケジュール] は、省略するか True にしておくと、設定した起動スケジュールが有効になるというものです。False なら無効になります。無効にするなら、最初からこんなメソッド使わなきゃいいわけで、普通はあまり使う機会もないと思うけど、この引数を変数にしておいて、条件によってスケジュールの有効/無効を切り替えるような複雑なマクロ(ゲームとか?)を作る時に使うのかもしれません。あ、そうだ。もし VBA でゲーム作ってる強者がいたら教えてくださいな。そんで、そのファイル送って。こばとが遊ぶから。
コメント