Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Access 2016)
time関数を使って待機する処理
投稿日時: 21/05/11 13:36:23
投稿者: マヨイ

ACCESSのVBAで一定時間待機する処理をしたいです。
色々調べた結果、この方法なら待機することができます。
しかしこの方法は正しいのでしょうか?
while文の中で、条件に出てくる変数をwhileの中で書き換えている
ところが少しひっかかりました。
もし間違ったコードであれば修正します。
 
 
Private Sub コマンド0_Click()
Dim sTimer As Date
Dim fTimer As Date
 
sTimer = Time
'10秒待機する
fTimer = Time + #12:00:10 AM#
 
While sTimer < fTimer
sTimer = Time
Wend
 
’何らかの処理
 
End Sub
 
 
 
よろしくお願いいたします。

回答
投稿日時: 21/05/11 14:03:33
投稿者: sk

引用:
ACCESSのVBAで一定時間待機する処理をしたいです。

引用:
sTimer = Time
'10秒待機する
fTimer = Time + #12:00:10 AM#
  
While sTimer < fTimer
sTimer = Time
Wend

引用:
しかしこの方法は正しいのでしょうか?

・Time 関数の戻り値は Date 型の時刻データであり、
 その内部処理形式は倍精度浮動小数点型( Double )である。
 
・Double 型の小数部分を時刻成分として扱うという Date 型の性質上、
 時刻(小数)同士の四則演算によって極小の誤差が生じる恐れがある。
 
・Date 型の時刻データには 1 秒未満の時間が含まれていないため、
 Time 関数を呼び出すタイミングによって相応の誤差が生じる恐れがある。
 
大まかな待機時間としてならそれでもよいのかも知れませんけど、
あまり精度が高い時間計算処理とは言えないでしょう。
 
API を使ってもよいなら、例えば Sleep 関数を呼び出すという方法が挙げられます。

回答
投稿日時: 21/05/11 15:33:25
投稿者: Suzu

引用:
しかしこの方法は正しいのでしょうか?
while文の中で、条件に出てくる変数をwhileの中で書き換えている
ところが少しひっかかりました。

 
ループ処理の中で ループ処理用カウンタ変数の値を書き換えるのは良く用いられる方法です。
 
 
ただ、、その間、Accessは、ユーザーの操作を受け付けなくなります。
 (DoEvents を入れ、ユーザーの操作を受け付ける様にする方法はあります)
 
待機に厳密な時間を要する話でもないでしょうし、フォームのTimerイベントを使えば十分と思います。
【Timer イベント (Access)】
https://docs.microsoft.com/ja-jp/office/vba/api/access.form.timer

回答
投稿日時: 21/05/11 17:43:09
投稿者: hatena
投稿者のウェブサイトに移動

もし、23:59:50以降にこのボタンをクリックしたら無限ループに陥ります。
Time ではなく Now にすべきでしょう。
 
他の方の回答にあるように Sleep関数を使うか、Timerイベントを使う方法をお勧めします。

投稿日時: 21/05/11 22:53:36
投稿者: マヨイ

>>sk様
>>Suzu様
>>hatena様
ご回答ありがとうございます。
 
よく使われる処理なのですね。
Sleep関数やTimerイベントは使ったことがないので
いただいた情報をもとに調べながら使ってみたいと思います。
ありがとうございます。

トピックに返信