• ベストアンサー

「一定の時間間隔で5秒毎にマクロを実行する」

Timer関数を使ったループ 「一定の時間間隔で5秒毎にマクロを実行する」 ようにしてMacro1を実行したいのですが、 うまくいきません。どう改変したらいいでしょうか。 Sub Macro2() Dim tt As Double Dim wt As Double tt = Now + TimeValue("00:00:05") '5秒後 wt = TimeValue("00:00:01") 'インターバル1秒 Application.OnTime TimeValue("00:00:05"), "Macro1", TimeValue("00:00:01") End Sub

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

以下の様に改変してください。 tt = Now + TimeValue("00:00:05") '5秒後 wt = tt + TimeValue("00:00:01") 'インターバル1秒 Application.OnTime tt, "Macro1", wt なお、Macro1の方は例えば以下です。 Sub Macro1() Range("A1").Value = Range("A1").Value + 1 Call Macro2 End Sub >Application.OnTime TimeValue("00:00:05"), "Macro1", TimeValue("00:00:01") では、午前0時0分5秒に実行されます。 ので、EarliestTimeの引数は、「Now+TimeValue("00:00:05")」とします。

komet115
質問者

お礼

ありがとうございました。

komet115
質問者

補足

ありがとうございます。 最後これとは別に 本ループ停止をマクロ化してボタン配置 したいんですができますか??

その他の回答 (2)

回答No.3

Public Sub Pause(ByVal PauseTime As Single)   Dim Finish As Single   Finish = Timer + PauseTime   Do     DoEvents   Loop Until Timer > Finish End Sub 添付図が判りにくいですが、これが Windows3.1 時代のポーズ関数。 Sub XXXX1   StopNow = False   Do     Call AAAA     Pause 5   Loop Until StopNow End Sub XXXX1 は5秒間休止して Call 文を StopNow が真になるまで実行します。 このループを止めるには、ボタンを押したイベントで Sub XXXX2   StopNow = True End Sub と、StopNow に True を代入します。 PS、なお、Application.OnTime を使った場合の停止要領は少し違います。

回答No.2

Windows3.1登場時に作成した Pause() を紹介します。 添付図は、Excel2010 にて5秒毎にDebug.Print を呼び出しています。 Dim StopNow As Boolean Sub XXXX1   StopNow = False   Do     Call AAAA     Pause 5   Loop Until StopNow End Sub Sub XXXX2   StopNow = True End Sub これで、StopNow が真になるまで5秒毎に AAAA が呼ばれると思います。

komet115
質問者

補足

ありがとうございます。 最後これとは別に 本ループ停止をマクロ化してボタン配置 したいんですができますか??