1 秒延迟持续近 2 秒
1 sec delay lasts almost 2 sec
我正在编写代码,每秒将数据从一个电子表格复制到另一个电子表格。我试过 Application.Wait 和 Sleep,但它们都阻止了这两个电子表格,所以我决定使用 do until 循环。它有效,但 1 秒持续了将近 2 秒,我不知道为什么。所以我只在代码中留下了循环,但测试给出了相同的结果(大约花费了 95 秒)。有什么建议吗?这是代码:
Sub Test()
Dim Delay As Date
cell = 1
For i = 1 to 60
Workbooks("Data").Worksheets("Sheet1").Range("C" & cell).Value = cell
cell = cell +1
Delay = Now() + TimeValue("00:00:01")
Do Until Now() >= Delay
Do Events
Loop
Next i
End Sub
这只是一个近似的延迟,因为您真的不知道还有什么正在通过消息队列并由 DoEvents
命令(顺便说一句)处理。另一种方法是使用 Application.OnTime method.
从自身内部调用该过程
Sub timed_routine()
Application.Interactive = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1) = 1
Application.Interactive = True
'Debug.Print Timer
Application.OnTime Now + TimeSerial(0, 0, 1), "timed_routine"
End Sub
在取消注释并激活 Debug.Print Timer
命令的情况下,此例程在大约 1.015 秒内循环。
我正在编写代码,每秒将数据从一个电子表格复制到另一个电子表格。我试过 Application.Wait 和 Sleep,但它们都阻止了这两个电子表格,所以我决定使用 do until 循环。它有效,但 1 秒持续了将近 2 秒,我不知道为什么。所以我只在代码中留下了循环,但测试给出了相同的结果(大约花费了 95 秒)。有什么建议吗?这是代码:
Sub Test()
Dim Delay As Date
cell = 1
For i = 1 to 60
Workbooks("Data").Worksheets("Sheet1").Range("C" & cell).Value = cell
cell = cell +1
Delay = Now() + TimeValue("00:00:01")
Do Until Now() >= Delay
Do Events
Loop
Next i
End Sub
这只是一个近似的延迟,因为您真的不知道还有什么正在通过消息队列并由 DoEvents
命令(顺便说一句)处理。另一种方法是使用 Application.OnTime method.
Sub timed_routine()
Application.Interactive = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1) = 1
Application.Interactive = True
'Debug.Print Timer
Application.OnTime Now + TimeSerial(0, 0, 1), "timed_routine"
End Sub
在取消注释并激活 Debug.Print Timer
命令的情况下,此例程在大约 1.015 秒内循环。