【发布时间】:2010-10-02 22:21:18
【问题描述】:
Access VBA 中是否有与Thread.Sleep() 等效的名称?
【问题讨论】:
-
这是一个 Access 常见问题解答,您会发现 mvps.org/Access 是常见问题解答的重要来源。
Access VBA 中是否有与Thread.Sleep() 等效的名称?
【问题讨论】:
Declare Sub Sleep Lib "kernel32" Alias "Sleep" _
(ByVal dwMilliseconds As Long)
使用以下语法调用睡眠函数:
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 完全无响应。在确保响应式 UI 的同时让 Excel 等待的解决方案是调用此 wait 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 秒。
See also for more detail about the use of the DateAdd function.
【讨论】:
可以使用 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 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
希望这会有所帮助:)
【讨论】: