【EXCEL】【VBA】Application.OnTimeを利用し指定時間経過後にサブプロセスを実行する例

EXCEL
Option Explicit

Sub Main()
    Application.OnTime Now + TimeValue("00:00:10"), "SubProc"
    MsgBox "Main 実行"

End Sub

Private Sub SubProc()
    MsgBox "SubProc 実行"
End Sub

久々のExcel VBA関連

Application.OnTimeを使うと、指定時間経過後にサブプロセス(SubProc)を実行できる。

また、Mainで Application.OnTime は結果を待つことなく MsgBox処理が行われる。

つまりうまく使えば、Excel上でタイマーイベント駆動による並列処理っぽい動き(実際は並列にはならない)の真似ができる。

そして

この応用で、マルチプロセスを実現されているサイトを発見した。これは面白い!

クラスとイベントとマルチプロセス並列処理|VBA技術解説 (excel-ubara.com)

Excelブック単体でExcelVBAを疑似マルチスレッド化してみる – えくせるちゅんちゅん (excel-chunchun.com)

以前、このブログでも、マルチプロセスの例を取り上げて、Excel hero のサンプルを見たことがあったけど、そのつくりは、VBA + VBScript の組み合わせになっていて、VBScriptを作り出すロジックのメンテは大変だなー、とそのままにしていた。

今回、Application.OnTimeをうまく使うことで、並列処理がやりやすくなる気がする。

余裕ができたら、Application.OnTime + Excel Hero のサンプルを乗せ換えてみようと思う。

世の中すごい人がいるもんだ。

マルチ処理したいなー ー> そののためにCreatethread/Createprocess等で苦労するより、VBAでできる範囲で頑張る感じが、無理が少なくて良い感じがする。 ー> え! Application.OnTimeと自分自身を呼び出せば、マルチ処理できるの! ワクワク(<=今ここ)

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

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