45

Thread.Sleep()Access VBA中是否有等价物?

4

8 回答 8

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

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

Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub 
于 2009-01-22T14:36:20.923 回答
8

不使用 kernel32 的另一种方法:

Dim started As Single: started = Timer

Do: DoEvents: Loop Until Timer - started >= 1
于 2011-10-17T23:27:59.423 回答
6

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

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

Sub SleepVBA() 
Sleep 1000 'Implements a 1 second delay 
End Sub 
于 2010-11-10T14:44:21.127 回答
6

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

    Sub Wait(seconds As Integer)
      Dim now As Long
      now = Timer()
      Do
          DoEvents
      Loop While (Timer < now + seconds)
    End Sub
于 2014-01-16T18:59:51.463 回答
3

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

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

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

有关该功能的使用的更多详细信息,另请参阅DateAdd

于 2012-03-01T17:15:31.317 回答
3

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

在此处输入图像描述

如果是这样,您可以将其声明为私有:

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

于 2016-12-01T16:18:00.343 回答
2

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

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

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

Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))
于 2014-02-11T16:16:32.000 回答
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

希望这可以帮助 :)

于 2011-10-20T17:57:42.983 回答