在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