等待 Excel 个宏

Waiting in Excel Macros

我正在录制一个 Excel Macro,我希望它在切换到下一个值之前等待半秒。我正在绘制图表的变化,现在它只是猛烈地浏览这些值,所以你真的看不到任何变化。因此,我希望它在继续之前等待半秒钟。

我使用的 Macro 如下所示:

Sub Macro2()
' Macro2 Macro
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("C2").Select
End Sub

现在我很想做类似下面的事情,但它不起作用。

Sub Macro2()
' Macro2 Macro
    Range("C1").Select
ActiveCell.FormulaR1C1 = "1"
Range("C1").Select
Sleep (100)
ActiveCell.FormulaR1C1 = "2"
Range("C2").Select
Sleep (100)
End Sub

请帮忙?我在 Mac Office Excel 2011.

Application.Wait(Now + s / 86400) 是一种方式,其中 s 是秒数。一天有86400秒。请注意,由于其内部工作方式,等待时间可能会更长。

如果这不够可靠(似乎 s 需要是一个整数),而你的 OS 支持它,那么你总是可以求助于使用内核函数将为您提供亚秒级粒度:

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

将其包含在模块的顶部,并以正常方式调用:Sleep(500) 将暂停(至少)1/2 秒。

尝试Application.Wait(time)。它暂停宏直到指定时间,然后 returns True.

等待1秒:

Application.Wait(Now + TimeValue("0:00:01"))

(于 Excel 2010 年 Windows 测试)

附带说明 - 使用宏记录器时,查看之后生成的代码,看看是否可以删除 select 语句。

您的代码将变成

Sub Macro2()
' Macro2 Macro
    Range("C1").FormulaR1C1 = "1"
    ' Whichever method you want to use from the other two answers put here
    Range("C1").FormulaR1C1 = "2"
End Sub

这将使它更有效率。我没有添加你问题的答案,因为它已经被回答了

Application.Wait Now + TimeSerial(0, 0, 1)

这应该最多等待 1 秒。但是您永远无法确定 VBA。这会等待指定的时间,所以如果您有 11:30:30 ,您将等到 11:30:31,这将使其仅持续 0.5 秒.

就这么简单 Application.Wait (Now + 0.000001) 1/10 秒 :

Sub Macro2()
' Macro2 Macro
Range("C1").FormulaR1C1 = "1"
Application.Wait (Now + TimeValue("0:00:01")) '1sec
Range("C1").FormulaR1C1 = "2"
Application.Wait (Now + 0.000001) '1/10sec
Range("C2").Select
End Sub