如何暂停特定的时间? (Excel中/ VBA)
我有一个Excel工作表具有以下macros。 我想循环它,但是如果我能find这个function的话,它就会跳起来。 这不可能吗?
Sub Macro1() ' ' Macro1 Macro ' Do Calculate 'Here I want to wait for one second Loop End Sub
使用Wait方法 :
Application.Wait Now + #0:00:01#
或(对于Excel 2010及更高版本):
Application.Wait Now + #12:00:01 AM#
将其添加到您的模块
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
或者,对于64位系统使用:
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
像这样在你的macros中调用它:
Sub Macro1() ' ' Macro1 Macro ' Do Calculate Sleep (1000) ' delay 1 second Loop End Sub
而不是使用:
Application.Wait(Now + #0:00:01#)
我更喜欢:
Application.Wait(Now + TimeValue("00:00:01"))
因为事后阅读要容易得多。
这对我来说是完美无瑕的。 在“do until”循环之前或之后插入任何代码。 在你的情况下,把5行(time1 =&time2 =&“do until”循环)放在do循环的最后
sub whatever() Dim time1, time2 time1 = Now time2 = Now + TimeValue("0:00:01") Do Until time1 >= time2 DoEvents time1 = Now() Loop End sub
kernel32.dll中的Sleep声明在64位Excel中不起作用。 这将是更一般的一点:
#如果VBA7那么 公共声明PtrSafe子睡眠库“kernel32”(ByVal dwMilliseconds As LongPtr) #其他 Public Declare Sub Sleep Lib“kernel32”(ByVal dwMilliseconds as Long) #万一
只是一个清理版本的clemo代码 – 在Access中工作,没有Application.Wait函数。
Public Sub Pause(sngSecs As Single) Dim sngEnd As Single sngEnd = Timer + sngSecs While Timer < sngEnd DoEvents Wend End Sub Public Sub TestPause() Pause 1 MsgBox "done" End Sub
Application.Wait Second(Now) + 1
Function Delay(ByVal T As Integer) 'Function can be used to introduce a delay of up to 99 seconds 'Call Function ex: Delay 2 {introduces a 2 second delay before execution of code resumes} strT = Mid((100 + T), 2, 2) strSecsDelay = "00:00:" & strT Application.Wait (Now + TimeValue(strSecsDelay)) End Function
尝试这个 :
Threading.thread.sleep(1000)
我有这个回答这个问题:
Sub goTIMER(NumOfSeconds As Long) 'in (seconds) as: call gotimer (1) 'seconds Application.Wait now + NumOfSeconds / 86400# 'Application.Wait (Now + TimeValue("0:00:05")) 'other Application.EnableEvents = True 'EVENTS End Sub
我通常使用计时器function来暂停应用程序。 将此代码插入你的
T0 = Timer Do Delay = Timer - T0 Loop Until Delay = 1 'Change this value to pause time for certain amount of seconds