Excel VBA 実行時刻にマクロを実行する OnTimeメソッド一時停止するWaitメソッド

スポンサーリンク
スポンサーリンク

OnTime【オンタイム】メソッド

時刻を指定してマクロを実行するには
Applicationオブジェクトの
OnTime【オンタイム】メソッドを使用します。

OnTime【オンタイム】メソッドの書式

[]内は省略可能です。
オブジェクト.OnTime(EarliestTime,Procedure,LatestTime,Schedule)


設定項目(引数)の説明

  • オブジェクト(必須)
    Applicationオブジェクトを指定します。
  • EarliestTime【イヤーリストタイム】(必須)
    マクロを実行する時刻を指定します。
  • Procedure【プロシージャー】(必須)
    実行するマクロの名前を文字列型(String)で指定します。
  • LatestTime【レイテストタイム】(省略可)
    マクロが実行できる状態になるまで待つ最終時刻を指定します。
    設定した時刻までにExcelが待機モードにならない場合は
    指定した時刻までマクロは実行されません。
    省略した場合は、マクロが実行できる状態になるまで待機します。
  • Schedule【スケジュール】(省略可)
    Falseに設定した場合はマクロを指定した時刻に実行することを取りやめます。
    省略またはTrueを指定した場合は、設定通りにマクロを実行します。

※引数EarliestTime(マクロを実行する時間)に指定した時刻になっても
ユーザーがなんらかの操作をしていてExcelが待機モードに入れない場合は
処理は実行されません。引数LatestTime(待つ最終時刻)を指定して、
その時刻でも待機モードでない場合は、マクロは実行されません。
引数LatestTimeを省略するとユーザーがExcelの操作を終えた時点、
なおかつ、引数EarlisTime(マクロを実行する時間)を過ぎている場合に
マクロが実行されます。

現在の時刻から5秒後にマクロを実行するコード

Sub 指定時刻実行()
Application.OnTime Earliesttime:=Now + TimeValue("00:00:05") _
, Procedure:="マクロ実行"
End Sub
Private Sub マクロ実行()
MsgBox "実行しました。"
End Sub

コードの解説

OnTime【オンタイム】メソッドの引数EarliestTime【イヤーリストタイム】に
開始時間をNow関数で現在時刻を取得して
TimeValue【タイムバリュー】関数の引数に5秒を指定して
現在時間から5秒後を指定します。
引数Procedure【プロシージャー】に実行するマクロの名前
“マクロ実行”を指定します。
マクロ実行プロシージャ―は、モジュール内からのみ実行できる
Private【プライベート】Subステートメントで宣言して
実行するマクロを記述します。


一定時間おきにマクロを実行する方法

メッセージを表示する「マクロ実行」マクロを5秒おきに
実行します。「指定時間実行」プロシージャ―の
OnTimeメソッドの引数Procedure(実行するマクロ名)を
自分自身(指定実行プロシージャ―)にすることで
5秒毎に自分自身(指定実行プロシージャ―)を繰り返します。
結果、マクロを一定時間おきに繰り返すマクロになります。

5秒おきにマクロの実行を繰り返すコード例

Dim 実行時間 As Date
Sub 指定時刻実行()
実行時間 = Now + TimeValue("00:00:05")
Application.OnTime Earliesttime:=実行時間 _
, Procedure:="指定時刻実行"
マクロ実行
End Sub
Private Sub マクロ実行()
MsgBox "3秒おきに実行しています。。"
End Sub
Sub マクロ中止()
Application.OnTime Earliesttime:=実行時間 _
, Procedure:="指定時刻実行", Schedule:=False
MsgBox "マクロを中止します。"
End Sub

コードの解説

マクロを中止するコードがないとマクロを中止することが
できないので「マクロ中止」マクロを作成します。
そこで使用するOnTimeメソッドの
引数Earliesttime(マクロを実行時間)はモジュールレベル変数に
格納した変数実行時間の値を使用します。
引数Procedure(実行するマクロ)に「指定時刻実行」マクロを指定し
引数Schedule【スケジュール】にFalseを指定することにより
マクロを中止します。


Wait【ウエイト】メソッド

実行中のマクロを一時停止するには
Applicationオブジェクトの
Wait【ウエイト】メソッドを使用します。
Excelの動作も一時停止しますが、バックグラウンドで
実行されている印刷設定の処理などの処理は継続されます。

Wait【ウエイト】メソッドの書式

オブジェクト.Wait(Time)


設定値の説明

  • オブジェクト(必須)
    Applicationオブジェクトを指定します。
  • Time【タイム】
    一時停止しているマクロの実行を再開する時刻を指定します。
    時刻として認識できない値を指定するとエラーになります。
    時刻を示す文字列を時刻データ(シリアル値)に変換するTimeValue関数や
    時刻として認識できるかを判定するIsDate関数を使用して
    適切な値を指定します。

マクロ実行を5秒間停止するコード例

Sub 一時停止()
MsgBox "マクロを5秒間停止します。"
Application.Wait Now + TimeValue("00:00:05")
MsgBox "5秒経過しました"
End Sub

以上で
OnTimeメソッド、Waitメソッドについての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク