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の操作を終えた時点、なおかつ、引数EarlistTime【イヤーリストタイム】(マクロを実行する時間)を過ぎている場合にマクロが実行されます。

現在の時刻から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【ウェイト】メソッドについての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告