• ベストアンサー

1秒以下のApplication.Waitは可能ですか?

こんばんは。 ExcellのVBAで、ほかのアプリケーションを操作するときに、Waitを使って、Now+TimeValue("00:00:05")のような記述をするときに、1sec.以下の、たとえば0.5sec.のような時間設定をしたいときは、どうしたらいいのでしょうか。 どなたかご存知の方、いらっしゃれば是非、教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 よく使われるのは、Timer 関数を使った方法か、Sleep API 関数を使った方法 です。Sleep API については #1 さんが既に回答されてますので、Timer 関数 を使った方法を紹介します。 【Excel VBA の Timer 関数】 ' Wait処理 (Windows XP でインターバル 15 msec) Sub Wait_Timer(ByVal lngMilliseconds As Long)   Dim sngStart As Single   sngStart = Timer   While Timer > sngStart + lngMilliseconds     DoEvents ’<-- DoEvents が必要かどうかはケースバイケース   Wend End Sub API を含め時間処理系については 1/1000 秒単位など詳細な時間を指定できる ものがありますが、どの命令を選択するか、あるいは OS 等の環境の違いにより、 その精度は異なります。 Excel VBA の Timer 関数や Sleep API 関数では、Windows XP 使用時のインター バルは概ね 15 msec。つまり、それ以下の数値を指定しても約 15 msecで稼動 してしまいます。 数値測定など厳密な時間精度が必要な場合は、timeGetTime API を使いますが、 それ以外の通常の用途では、上記の方法で概ね問題ないと思います。 なお、Win32API 関数を Excel VBA で使う場合、Declare ステートメントが必須 になりますので、Excel 97 以降で使用可能となります。

korn333
質問者

お礼

KenKen_SPさん、ありがとうございます。一応、marbinさんの方法で作動していますが、KenKen_SPさんの方法でもきっちり動きました。marbinさんにもコメントしましたが、もっと記述の意味を勉強しないといけませんね(苦笑)。API関数なんて正直さっぱりですからねえ・・・。頑張って勉強します。ありがとうございいました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

#1です。 Sleepはエクセルのバージョンによって使えない 場合があるようです。

すると、全ての回答が全文表示されます。
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

標準モジュールの先頭に↓を記述 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) プロシージャの間を空けたいところで Sleep 400 などと記述、でいかがでしょう? 1000で1秒になります。

korn333
質問者

お礼

marbinさん、ありがとうございます。 教えていただいた方法で、作動確認できました! あとは、記述の意味を勉強しないといけませんね(汗)。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A