こんにちは、Ryoです。
VBAを使って処理したい内容によっては、一定時間経過後にコード(プロシージャ)実行させたいケースもあるかもしれませんので、現在時刻を取得してTime Value関数で経過させたい時間を加算し、時間経過後に上書き保存と保存日時(更新日時)取得の処理を実行するOn Timeメソッドについて書いてみたいと思います。
1.サンプル概要
今回使用するファイル名を「ontime_Sample.xlsm」として、特にシート上には何も記載していませんがサンプルコード実行して10秒後に上書き保存を実行し、保存を実行した日時(更新日時)を取得してメッセージボックスに表示します。
このファイルに対し処理を実行すると、10秒後に以下のメッセージボックスが表示されます。
保存されたファイルのプロパティを確認すると「更新日時」が取得されています。
2.サンプルコード
◆Sample1・・・10秒後に処理を実行する
Sub Sample1() '現在時刻から10秒後に「Sample2」プロシージャを実行する Application.OnTime EarliestTime:=Now + TimeValue("00:00:10") _ , procedure:="Sample2" End Sub
指定した時間に処理を実行する為にはOn Timeメソッドを使います。
引数EarliestTimeに指定した時刻に、引数procedureに指定したプロシージャを実行します。
オブジェクト.On Time EarliestTime:=指定時刻 , procedure:= 実行プロシージャ
構文としてはオブジェクト.On Time(EarliestTime,procedure,LatestTime,Schedule)ですが、私自身が上述のEarliestTimeとprocedureしか指定して使っていないのもあり、その他の引数については割愛します。
サンプルではEarliestTimeにNow関数で取得した現在時刻にTime Value関数を使って10秒加算した時刻を指定して、時間が経過したらSample2プロシージャを実行させるものです。
Application.OnTime EarliestTime:=Now + TimeValue(“00:00:10”) _ , procedure:=”Sample2″
本コードを実行することで、10秒経過後にSample2が実行されます。
◆Sample2・・・上書き保存/更新日時の取得と表示
Sub Sample2() ThisWorkbook.Save '指定ファイルの更新日時を取得 MsgBox "このファイルは" & FileDateTime(ThisWorkbook.Path & _ "\" & ThisWorkbook.Name) & "に保存を実行しました。", vbInformation End Sub
時間経過後に本プロシージャが実行され、まず上書き保存を実行しています。
ThisWorkbook.Save
この指定だけで実行ファイルがある場所に上書き保存されます。
次にメッセージボックスで表示していますが、その中でファイルの更新日時を取得します。
FileDateTime(パス名)
このFileDateTime関数はファイルの作成日時や更新日時を取得するものです。
引数はフルパスで指定する必要がありますので、サンプルでは以下のようにしています。
FileDateTime(ThisWorkbook.Path & “\” & ThisWorkbook.Name)
ここで取得される日時はWindowsのシステム設定形式に準拠します。
Sample2を実行することで、サンプル概要に示したようにメッセージボックスが表示され、取得した更新日時を表示します。
3.On Timeメソッド使用上の注意点
VBAでの通常処理でプロシージャ内から別のプロシージャをCallなどで呼び出す場合は、呼び出したプロシージャの処理が終わるまで、呼び出し元のプロシージャは処理を中断します。
しかし!On Timeメソッドを使って別のプロシージャを実行した場合は、呼び出し元のプロシージャの処理は継続されて中断しないという点が異なりますので、ご注意くださいませ。
4.まとめ
On Timeメソッドを使うことで指定時間に処理を実行すること自体は簡単に実行出来ます。
但し呼び出し元のプロシージャの処理も継続されるという点があるので、そこだけ注意して使用すればVBA処理の幅が広がるのではないかと思います。
FileDateTimeは簡単に更新日時などを取得出来ますから、方法さえ知っておけば何かと使えるケースが多いのでお薦めです。機会があれば検討されてみると良いかもしれませんね。
以上、指定時間に処理の実行/ファイル更新日時を取得する方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo