Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8470 / 13646 ツリー ←次へ | 前へ→

【33079】0.5秒 よっちゃん 06/1/2(月) 4:36 質問[未読]
【33082】Re:0.5秒 だるま 06/1/2(月) 9:08 回答[未読]
【33084】Re:0.5秒 よろずや 06/1/2(月) 12:10 発言[未読]
【33092】Re:0.5秒 Kein 06/1/2(月) 15:24 回答[未読]
【33120】Re:0.5秒 ichinose 06/1/3(火) 12:19 発言[未読]

【33079】0.5秒
質問  よっちゃん  - 06/1/2(月) 4:36 -

引用なし
パスワード
   Application.Wait Time + TimeValue("00:00:01")
これは1秒後ですが、
0.5秒後とか0.1秒後とか1秒以下後にするにはどう書けばいいのですか?

【33082】Re:0.5秒
回答  だるま WEB  - 06/1/2(月) 9:08 -

引用なし
パスワード
   ▼よっちゃん さん:
>Application.Wait Time + TimeValue("00:00:01")
>これは1秒後ですが、
いいえ、正確には1秒以内です。^d^
下記で確認できます。

Sub test()
  Dim T As Single
  T = Timer
  Application.Wait Time + TimeValue("00:00:01")
  Debug.Print Timer - T
End Sub

>0.5秒後とか0.1秒後とか1秒以下後にするにはどう書けばいいのですか?
簡単にはTimerを利用してループして待つ方法があります。
ただし、Timerの場合夜中の0時をまたぐと0に戻ってしまうのでそのような時は
使えません。

Sub test2()
  Dim T As Single
  T = Timer
  Sleep 0.5
  Debug.Print Timer - T
End Sub

Private Sub Sleep(Optional T As Single = 1)
  'T秒間待つ
  Dim T1 As Single
  T1 = Timer + T
  Do While Timer < T1
    DoEvents
  Loop
End Sub

【33084】Re:0.5秒
発言  よろずや  - 06/1/2(月) 12:10 -

引用なし
パスワード
   > Private Sub Sleep(Optional T As Single = 1)
検索すればすぐに出てくるAPI関数と同じ名前は
紛らわしいので遠慮してほしい。

【33092】Re:0.5秒
回答  Kein  - 06/1/2(月) 15:24 -

引用なし
パスワード
   Win32APIの関数を使えばできます。モジュールの先頭に

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

と、宣言し(シートモジュールやフォームモジュールの場合は、頭に Private を
追加する)指定したいプロシージャ内の目的の個所に

Sleep 500

とすれば 0.5秒間 コードの実行を止めることが出来ます。つまり、設定できるのは
1 /1000秒単位になるのですが、必ずしも正確な設定が出来るとは限らないようです。

【33120】Re:0.5秒
発言  ichinose  - 06/1/3(火) 12:19 -

引用なし
パスワード
   皆さん、こんにちは。
今年もよろしくお願いします。

>Application.Wait Time + TimeValue("00:00:01")
>これは1秒後ですが、
>0.5秒後とか0.1秒後とか1秒以下後にするにはどう書けばいいのですか?
正確さは欠きますが、こんな方法も試してみて下さい。

標準モジュールに
'========================================
Private tt As Double
'========================================
Sub test1()
  tt = [now()]
  Application.OnTime [now()+"00:00:01"], "sample"
End Sub
'========================================
Sub test2()
  tt = [now()]
  Application.OnTime [now()+"00:00:00.50"], "sample"
End Sub
'========================================
Sub test3()
  tt = [now()]
  Application.OnTime [now()+"00:00:00.01"], "sample"
End Sub
'========================================
Sub sample()
  MsgBox Application.Text([now()] - tt, "hh:mm:ss.00")
End Sub


として、 test1,test2,test3をそれぞれ実行してみて差を確認してみて下さい。

8470 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free