Application.wait在VBA

时间:2015-09-02 16:22:28

标签: excel-vba wait vba excel

我想在我的应用程序中添加1秒的等待时间。

我在网上找到了什么?

newHour = Hour(Now())
   newMinute = Minute(Now())
   newSecond = Second(Now()) + 1
   waitTime = TimeSerial(newHour, newMinute, newSecond)
   Application.Wait waitTime

这是我的代码

Sub workwithdelay()
Dim i As Integer
Dim done As Integer
Dim newHour As Integer
Dim newMinute As Integer
Dim newSecond As Integer
Dim waitTime As String
Dim ws As Worksheet


Set ws = ActiveSheet

frame = Cells(1, "A").Value


For i = 1 To done

newHour = Hour(Now)
newMinute = Minute(Now)
newSecond = second(Now) + 1
waitTime = newHour: newMinute: newSecond

(ALL of work Code)

Application.Wait waitTime

Next i

End Sub

代码需要0.30秒到0.45秒才能完成for循环中的一个循环(不包括等待时间),具体取决于数据处理。无论循环的处理时间是多少,我都想添加一个确定的1秒来完成一个循环周期。

2 个答案:

答案 0 :(得分:1)

您需要对do...loop + timer使用不同的技巧。

Sub WaitOneSecond()

    Dim Start as single
        start = timer
    do while start + 1 > timer
       doevents
    loop
end sub

并在必要的原始子调用WaitOnSecond中填写:

Sub workwithdelay()
(...)

For i = 1 To done
(...)
call WaitOnSecond

Next i

End Sub

上面的一些信息:

  1. timer从今天的中午开始计算秒数和毫秒数
  2. 小心我的代码在午夜之前运行 - 当新的一天开始时它是不正确的
  3. application.wait无法识别毫秒,因此您无法获得准确的1秒等待时间

答案 1 :(得分:1)

你有正确的想法,但我认为你想要的是TimeValue函数(documented here)。

你可以像这样使用它:

Dim StartTime as Date
Dim EndTime as Date

StartTime =  Now
EndTime = StartTime + TimeValue("00:00:01")
' Do Stuff
Application.Wait EndTime

这会导致应用程序在Do Stuff部分的开始之后等待一秒钟,我认为这就是你所要求的。

希望这会有所帮助:)