2016-11-04 181 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

相關問題