在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)