エクセル VBA タイマー 0:00:00で
5分ピッチで 仕事させます。
ブックオープンで
インターバル = TimeValue("00:05:00")
Application.OnTime Format(開始時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間
Debug.Print "st" & 開始時刻
Call timer_set
反復時刻 = 開始時刻
If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then
反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10")
Else
反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル
End If
ループで5回ほど
Application.OnTime Format(反復時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間
Debug.Print "loopexit" & 反復時刻
で、デバッグアウトが
end 2013/08/15 3:02:00
st 2013/08/14 23:50:10
loop2013/08/14 23:55:10
loop2013/08/15 00:00:10
loop2013/08/15 00:05:10
loop2013/08/15 00:10:10
loopexit2013/08/15 00:15:10
makuro 2013/08/15 00:20:10
makuro 2013/08/15 00:25:10
makuro 2013/08/15 00:30:10
で、「必要な作業を行うマクロ」 で 仕事のあと タイマー追加します。
If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then
反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10")
Else
反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル
' End If
Application.OnTime Format(反復時刻, "hh:mm:ss"), "必要な作業を行うマクロ", 待ち時間
(反復時刻を 時間だけの時 formatを 入れて・・・)
Debug.Print "makuro " & 反復時刻 ’これが デバッグで出力されています。
で、ダミーの作業が
clup = clup + 1
orgdata.Cells(clup, 10) = Format(Now, "yyyy/mm/dd")
orgdata.Cells(clup, 11) = Format(Now, "hh:mm:ss")
orgdata.Cells(clup, 12) = Format(反復時刻, "yyyy/mm/dd")
orgdata.Cells(clup, 13) = Format(反復時刻, "hh:mm:ss")
結果
2013/8/14 23:50:10 2013/8/15 0:20:10
2013/8/14 23:55:10 2013/8/15 0:25:10
2013/8/15 0:00:10 2013/8/15 0:30:10
これで、タイマー作業が 途切れます。
0:00:00 超える事に 問題があるなら 0:00:10 は 実行されないハズ・・・・
反復時刻は yyyy/mm/dd & ” ” & ”hh:mm:ss” です。
試しに 時刻だけでやっても 同じでした。
さて、如何でしょ?
実は これで、動いていたのですが、3日ほど前から 0:00以降 突然タイマーが動かなくなったのです
PCは 3台 同じ現象です よって WINの設定では無い・
エクセル オプションに 何か設定でもあるのか??
どうも VBAのタイマーは不可解で
エクセル終了させず、 プログラムだけ終了、再ロードだと、前のタイマー残ったまま、ダブルでタイマー動くとか・・・・
それと、WIN32とかの 別のタイマー使った方が 良いのでしょうか??
お礼
早速の回答ありがとうございました。 教えていただいたTime関数を使ってできました! 何か違うなあと思いつつもTimerだと思い込んでいて、 Time関数が思いつきませんでした。 初歩的な質問でしたが、本当にありがとうございました。