#044 一定時間待つ方法(Timer関数・Now関数を使った方法) VBA

VBAの一連のコードの中で、処理と処理との間で一定時間待機する方法をご紹介します。

ここではまず Timer関数 を使ってそれを実現するサンプルプロシージャを示します。Timer関数は午前0時からの経過秒数を単精度浮動小数点数型(Single)で返す関数です。このサンプルプロシージャは、一定時間待機する部分を含むプロシージャから、
WaitSec 2.5   '2.5秒待ちます
のように呼び出して使います。
Sub WaitSec(sngWaitSec As Single)
  Dim sngCurTimer As Single

  '現時刻のTimer関数値に引数の秒数を加えて指定時間経過後の値を設定します
  sngCurTimer = Timer + sngWaitSec

  '現時刻のTimer関数値が所定の経過後の値になるまでループで待ちます
  Do
  Loop Until Timer >= sngCurTimer

End Sub

しかし、上記のコードには1つ問題点があります。待機ループ内で時刻が午前0時になるとTimer関数値はゼロに戻ってしまうため、無限ループになってしまうのです。そこで、それを解決するために、日付が変ってもゼロに戻ることのない Now関数 を使った方法を次に示します。

Now関数値は "99/04/01 10:10:10" のような形式だけでなく、倍精度浮動小数点数型(Double)の数値として扱うことができます。その場合、整数部分が"日"を表します。ここでは、Now関数値を倍精度浮動小数点数型として扱い、引数の秒数を日数に換算して加えることによって指定時間経過後の値を設定しています。
Sub WaitSec(sngWaitSec As Single)
  Dim dblCurDateTime As Double

  '1日は24Hr×60Min×60Sec=86400秒ですので、引数intWaitSecを
  'その値で割ることによって日単位に換算します
  dblCurDateTime = Now + sngWaitSec / 86400

  '現時刻のNow関数値が所定の経過後の値になるまでループで待ちます
  Do
  Loop Until Now >= dblCurDateTime

End Sub
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved