アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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 以降で使用可能となります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/19 08:42

#1です。



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

標準モジュールの先頭に↓を記述


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

プロシージャの間を空けたいところで
Sleep 400
などと記述、でいかがでしょう?
1000で1秒になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/19 08:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!