プロが教えるわが家の防犯対策術!

Excel VBAに関するご質問です。2016を使っています。
プロシージャーをミリ単位の時間間隔で繰り返す方法はあるのでしょうか?

1秒間隔なら、例えば

Sub test1()
Application.OnTime Now() + TimeValue("00:00:01"), "test2"
End Sub

Sub test2()
MsgBox "テストです"
test1
End Sub

としてtest1を実行すれば、1秒ごとに「テストです」のメッセージが表示されることは分かるのですが、これを例えば0.2秒ごとに実行することなどはできるのでしょうか?

どなたかご存知の方いらっしゃったら、教えていただければ幸いです。
よろしくお願いします。

A 回答 (2件)

こんばんは!



検索してみると
>Application.Wait
を使う方法が出ていました。
まず標準モジュールに↓のコードを記載し、Sample1のマクロを実行してみてください。

Sub Sample1()
 Dim Tm As Long
  With Range("A1")
   .Value = .Value + 1
  End With
  Tm = 200
   Application.Wait [Now()] + Tm / 86400000
    Call Sample2
End Sub

Sub Sample2()
 If Range("A1") = 11 Then
  Range("A1").ClearContents
  Exit Sub
 End If
  MsgBox "テストです。"
  Call Sample1
End Sub

これでSample1を実行してみてください。

※ Sample1とSample2を単純に呼び出すだけでは延々と無限に続いてしまいますので
A1セルをカウンタと使用し、10回で終わるようにしています。

※ コード内の「86400000」は
24*60*60*1000
で1日をミリ秒にした数値になります。

200ミリ秒=0.2秒 なので
Tmで200をセットしています。m(_ _)m
    • good
    • 1
この回答へのお礼

コードまで書いていただき、ありがとうございました。
Application.Waitでできました。

お礼日時:2018/06/14 00:18

windowsAPIのsleep関数を使用してください


提示の例はMsgboxで処理が止まるので1秒ごとには表示されません
    • good
    • 0
この回答へのお礼

ありがとうございました。
sleep関数でできました。

お礼日時:2018/06/14 00:18

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A