等待 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
我正在录制一个 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