2009-01-22 231 views

回答

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

使用以下語法來調用休眠功能:

Sub Sleep() 
Sleep 1000 'Implements a 1 second delay 
End Sub 
+0

啊,剛剛發現我的自我。謝謝! – 2009-01-22 14:38:55

+1

我應該注意到,在Excel 2007中,我可以直接調用Sleep而不使用包裝VBA子。 – 2013-10-28 20:31:52

+1

Declare語句應該位於模塊中以避免「聲明語句不允許作爲對象的公共成員」錯誤。 – HuckIt 2014-06-23 16:56:56

6

一對夫婦的修正案需要得到的代碼工作。 以下代碼是更正後的版本。

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

Sub SleepVBA() 
Sleep 1000 'Implements a 1 second delay 
End Sub 
8

的另一種方法,而無需使用KERNEL32:

Dim started As Single: started = Timer 

Do: DoEvents: Loop Until Timer - started >= 1 
1

在我的代碼添加

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

莫名其妙地產生更多的問題在其他地方。 我結束了使用此功能,我上其他論壇發現tweeked位:

Function WaitTime(n As Double) 
'Function that wait an amount of time n in seconds 
TWait = Time 
TWait = DateAdd("s", n, TWait) 
Do Until TNow >= TWait 
    TNow = Time 
Loop 
End Function 

希望這有助於:)

+1

我可以想到添加函數頭的唯一原因會導致「問題」,如果您已經在當前進程的模塊或類中使用函數名稱「Sleep」。 – 2012-01-23 03:32:42

2

我用這個在Excel和它的偉大工程:

Application.Wait DateAdd("s", 1, Now()) 

DateAdd()是一個相對於Now()(在這種情況下 - 您可以使用其他值作爲參數)的時間的函數,"s"是時間度量(本例中爲秒),並且增量爲1.因此,在這裏,函數調用告訴應用程序請等待1秒鐘。

See also for more detail about the use of the DateAdd function.

5

所有的方法,其餘的以使Excel等導致Excel中變得完全沒有反應。在確保響應式用戶界面的同時,讓Excel等待的解決方案是用等待的秒數調用此等待Sub。

Sub Wait(seconds As Integer) 
     Dim now As Long 
     now = Timer() 
     Do 
      DoEvents 
     Loop While (Timer < now + seconds) 
    End Sub 
2

可以使用Access VBA中的Excel Wait()過程。

第一步是確保從您的項目中引用Excel庫。

如果這樣做了下面的代碼將工作等待十秒鐘:

Call Excel.Application.Wait(Time:=DateAdd("s",10,Now())) 
1

如果使用Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long),你可以在對象模塊中得到這個錯誤。

enter image description here

如果是的話,你可以將它聲明爲private:

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

相關問題