VBA

VBAでミリ秒単位でのタイマー処理を行う

VBA
スポンサーリンク

秒以下の誤差が気になり始めた

 お手軽な手法かつ日またぎの際の誤作動がない手法としてdatediffを用いた処理時間の計測方法を利用していたが、秒以下の誤差が発生してしまう。今回、秒以下の誤差で事象の発生有無が変化していそうということがわかってきたため、秒以下の誤差をなくすべく手法を変更することにした。
 最初に試したのはVBA ミリ秒で出てきたGetLocalTimeを使おうとした。が、短いコードで日またぎまでの全ての繰り上がりを処理しようとしたが、ものすごく長いコードとなってしまったためいったんお蔵入りに。結局は日またぎをさけたTimerを使用することにした。
 Timerの場合、浮動小数点でその日の開始からの秒数を取得してくれるため、非常にお手軽に0.1秒程度の精度までであればタイマー処理ができる。ただ、練習がてら作成したコードでもばらつきがあり、ミリ秒レベルと題名でいいつつもそこまでの精度はない。がひとまずはこのレベルでOK(というかずっとOK)日またぎ時は動作しないように処理を加えて完成。

Sub waittime(ByVal t As Variant)

Dim oldtime
    
    oldtime = Timer()
    
    While oldtime + t > Timer()
    
        DoEvents
    Wend

End Sub

コメント

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