在VBA中是否有等价于Thread.Sleep()?

在Access VBA中是否有与Thread.Sleep()相当的function?

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

使用以下语法来调用睡眠function:

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

另一种不使用kernel32的方式:

 Dim started As Single: started = Timer Do: DoEvents: Loop Until Timer - started >= 1 

需要一些修改才能使代码正常工作。 下面的代码是正确的版本。

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) Sub SleepVBA() Sleep 1000 'Implements a 1 second delay End Sub 

所有使Excel等待的其他方法都会导致Excel完全无法响应。 在确保响应式用户界面的同时,让Excel等待的解决scheme是用等待的秒数调用此等待Sub。

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

我在Excel中使用它,它很好用:

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

DateAdd()是一个相对于Now() (在这种情况下 – 可以使用其他值作为参数)的时间的函数, "s"是时间度量(在这种情况下为秒),增量为1所以在这里,函数调用正在告诉应用程序等待1秒钟。

另请参阅有关使用DateAdd函数的更多详细信息。

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

第一步是确保从您的项目中引用Excel库。

完成后,下面的代码将等待十秒钟:

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

添加

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

不知何故在我的代码中的其他地方创造了额外的问题。 我结束了使用这个function,我发现在另一个论坛上,并微调了一下:

 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 

希望这可以帮助 :)

如果使用Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ,则可能在对象模块中出现此错误。

在这里输入图像说明

如果是这样,你可以声明它是私人的:

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