2009-01-22 115 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)

相关问题