1 2 3 4 5 6 7 8 9 10 11 |
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と自分自身を呼び出せば、マルチ処理できるの! ワクワク(<=今ここ)
コメント