2012-12-19 100 views
0

我想在vba中產生30秒的延遲。我不能使用'計時器',因爲我的應用程序將在一夜之間運行到第二天早上。 (計時器會產生秒數(分數)直到午夜)。除了Timer和Application.WaitNow()之外,還有其他方法可以實現這一點嗎?
我嘗試使用下面的代碼,但它拋出代碼執行已被中斷的錯誤。如何獲得30秒的延遲

Function Wait() 

Dim StartSecond 
Dim EndSecond 

StartSecond = Second(Now) 
'Sheets("SampleOutputEx").Range("M2") = StartSecond 

EndSecond = (StartSecond + 30) Mod 60        
While Second(Now) <> EndSecond 
    DoEvents 
Wend 

End Function 
+1

你爲什麼要等待?您可以使用Application.OnTime在30秒內安排需要運行的內容,如果這適用於您的用例。 – assylias

+0

@assylias你的意思是這樣嗎? Application.OnTime Now + TimeValue(「00:00:30」),「RunProcess」 –

+0

當你說它會在一夜之間運行時,你的意思是它會在一夜之間運行一次,或者整晚都會遞歸運行嗎? –

回答

0

在這裏,我們去一個更好的解釋。從未想過答案可能非常簡單。

Function Wait() 
Dim StartSecond As Single 
Dim EndSecond 
StartSecond = Now 

EndSecond = DateAdd("s", 30, Now) 

While Now < EndSecond 
DoEvents 
Wend 

End Function 

這對我來說很好。任何意見都非常感謝。

1

每當你想要的睡眠

Function Wait(Seconds as integer) 

    Sleep Seconds*1000 

End Function 

試試這個

Declare Sub Sleep Lib "kernel32" Alias "Sleep" _ 
(ByVal dwMilliseconds As Long) 

調用此功能,您還可以使用

expression.OnTime(When, Name, Tolerance) 

和時間設置爲下一次執行通過增加30秒到當前時間。

This文章有它

+0

這會暫停系統上其他正在運行的應用程序嗎? –

+0

不,它不會但會暫停您的vba應用程序 –

+0

VBA不支持多線程,因此您將獲得的技術將暫停應用程序或將使用時間複用來按計劃執行任務。 –