在Excelmacros中等待

我正在录制一个Excelmacros,我希望它等待半秒钟,然后切换到下一个值。 我正在绘制一个graphics的变化,现在它只是暴露了这个值,所以你没有看到任何变化。 我会喜欢它等待半秒钟,然后继续前进。

Macro Im使用如下所示:

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(time) 。 它将macros暂停,直到指定的时间,然后返回True

等待1秒钟:

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

(在Windows 2010的Excel 2010中testing)

只是在旁注中 – 使用macroslogging器时,请仔细阅读之后生成的代码,看看是否可以删除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 + s / 86400)是一种方法,其中s是秒数。 一天有86400秒。 请注意,等待时间可能会比这更大,因为这是如何工作的内部。

如果这不够可靠(似乎s需要是一个整数),并且你的操作系统支持它,那么你总是可以使用内核函数,它会给你秒级粒度:

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

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

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

这应该等待最多1秒。 但你永远不会确定与VBA。 这个等待的时间是指定的时间,所以如果你有11:30:30 半半的话 ,你会等到11点11:30:31 ,这个时间只有0.5秒。

就像Application.Wait (Now + 0.000001)那样简单1 / 10sec:

 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