是否与VBA中的Thread.Sleep()等效

时间:2009-01-22 14:32:47

标签: vba access-vba sleep

Access VBA中是否有Thread.Sleep()

8 个答案:

答案 0 :(得分:62)

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

使用以下语法调用Sleep函数:

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

答案 1 :(得分:8)

不使用kernel32的另一种方法:

Dim started As Single: started = Timer

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

答案 2 :(得分:6)

需要进行一些修改才能使代码生效。 以下代码是更正后的版本。

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

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

答案 3 :(得分:5)

使Excel等待的所有其他方法导致Excel变得完全没有响应。使Excel等待同时确保响应式UI的解决方案是使用等待的秒数来调用此等待子。​​

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

答案 4 :(得分: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 :(得分:2)

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

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

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

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

答案 6 :(得分:2)

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

enter image description here

如果是,您可以将其声明为私人:

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

答案 7 :(得分:1)

添加

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

希望这有助于:)