私は以下のようなapplication.ontimeルーチンを持っています。なぜ私のapplication.ontimeはif文で動かないのですか? VBA
Sub timer()
If Hour(Time) <= 15 Or Hour(Time) >= 22 Then
On Error Resume Next
Application.OnTime EarliestTime:=ThisWorkbook.Worksheets("Sheet1").Range("K5"), Procedure:="dataextract", Schedule:=False
On Error GoTo 0
ThisWorkbook.Worksheets("Sheet1").Range("K5") = Now + TimeSerial(0, WorksheetFunction.Floor(Minute(Now), 5) + 5 - Minute(Now), 1 - Second(Now))
Application.OnTime EarliestTime:=ThisWorkbook.Worksheets("Sheet1").Range("K5"), Procedure:="dataextract", Schedule:=True
End If
End Sub
私は、このルーチンがそうでday 1
に午後4時までday 0
で午後10時間で実行し、その後day 2
に午後4時までday 1
に午後10時に独自に再起動し、したいと思います。コードは午後4時に停止しますが、午後10時には再起動しません。あなたが見ることができるように、私はschedule:=false
を回していないので、なぜそれが再開しないのか理解できません。
'Timer'がすでに組み込まれているVBAの意味を私はどこかここでミスをしたと確信していますが、アイデアを得る必要があります。おそらく名前を変更します。私はこれが問題だとは思っていませんが、そうかもしれません。 –
あなたが撮影しているインターバルは何ですか?私はここであなたのTimeSerialの使用に従っているか分からない。そして、 'timer'はどのように呼び出されますか?いったん停止するとコードを再起動するものは何もありません。すなわち、「タイマー」が午後3時および午後10時の間に呼び出された場合、アクションは実行されず、他の実行はスケジュールされない。 –
私は5分ごとにそれを呼んでいます。 floor関数は最初の実行をちょうど次の5分間隔に丸めます。たとえば、午後9時43分に申請を開始し、午後9時45分に実行されます。また、application.ontimeのインスタンスが1つだけ実行されていることを確認します。 – A1122