Excel VBA の Application.OnTime で1秒未満(ミリ秒)を指定したい
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=14554;id=excel
によると Application.OnTime では無理っぽそうだ。
そのリンク先の、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=4953;id=excel
を見てもなにかコンポーネントを使わないとできないらしい。
ちなみに自分で試してみたところ、
Dim Fire As Date ' Fire = Now + TimeValue("00:00:01") ' n 秒後に設定。 Fire = CDate(Now() + ms / 86400000#) ' OnTime はワンショットタイマーである。 Call Application.OnTime(Fire, "UtilModule.TimerProc", , True)
のようなことはできるのだが、間隔が秒単位になってしまい、1秒より細かい間隔はいきなり0秒になってしまうみたいだ。VBA の Date 型は秒未満の精度は持っているのだが、OnTime が内部で秒単位で動いているようだ。しょうもない。
http://soudan1.biglobe.ne.jp/qa2751574.html
は Windows API の SetTimer を使う例だが、これだとたぶん OnTime とはコンテキストが違うんだよなあ。非常にネイティブなスレッドで動くことになるので安定性がないと思う。Excel 2007 では試していないけど。