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 秒内循环。