为什么我的application.ontime不能在if语句中工作? VBA

我有一个application.ontime例程如下。

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 0到第4 day 1晚上10点之间运行,然后在day 2 day 1到第4 day 2晚上10点自己重新启动,依此类推。 代码在下午4点停止,但不会在晚上10点重新启动。 正如你所看到的,我永远不会把schedule:=false所以我不明白为什么不重新启动..?

我确信我在这里犯了一个错误,但你应该明白…

 Sub timer() Const PROC As String = "dataextract" Const INTV_MIN As Long = 5 Dim rTime As Range Set rTime = ThisWorkbook.Worksheets("Sheet1").Range("K5") On Error Resume Next Application.OnTime EarliestTime:=rTime.Value, Procedure:=PROC, Schedule:=False On Error GoTo 0 If Hour(Time) <= 15 Or Hour(Time) >= 22 Then '5min from now rTime.Value = Now + TimeSerial(0, _ WorksheetFunction.Floor(Minute(Now), INTV_MIN) + INTV_MIN - Minute(Now), _ 1 - Second(Now)) Else '10pm today rTime.Value = Date + TimeSerial(22, 0, 0) End If Application.OnTime EarliestTime:=rTime.Value, Procedure:=PROC, Schedule:=True End Sub