2016-11-04 145 views
0

我有一个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 

我想这个程序至10点之间上day 0day 1运行到下午4点,然后自行重新启动晚上10点day 1到下午4点day 2,等等。代码在下午4点停止,但不会在晚上10点重新启动。正如你所看到的,我永远不会转身schedule:=false,所以我不明白为什么它不会重新启动..?

+0

'Timer'已经有一个内置的VBA意义。也许改名字。我怀疑这是问题,但可能是这样。 –

+1

你拍摄的时间间隔是多少?不确定我在这里按照你使用TimeSerial的方式。那么'timer'如何被调用?这里没有任何东西可以在代码停止后重启代码。即如果在下午3点之后和晚上10点之前调用“计时器”,则不采取行动并且不计划其他运行。 –

+0

我每5分钟致电一次。发言权功能将第一轮运行转到下一个5分钟的时间间隔。例如,我在晚上9点43分开始申请,晚上9点45分。我还检查以确保只有1个application.ontime运行实例。 – A1122

回答

1

我敢肯定,我在这里犯了一个错误的地方,但你应该明白我的意思...

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 
+0

如果定时器过程由'dataextract'过程调用,则不需要这些行:'On Error Resume Next'Application.OnTime EarliestTime:= rTime.Value,Procedure:= PROC,Schedule:= False'在错误转到0'上。也正如John之前提到的,建议将该过程的名称更改为[定时器是VBA功能](https://msdn.microsoft.com/en-us/library/office/gg264416(v = office.15)的.aspx) – EEM

相关问题