OnTime函数混淆

我已经写下VBA代码以下5秒后执行,但它不起作用。

Option Explicit Public RunWhen As Double Public Const cRunIntervalSeconds = 5 ' two minutes Public Const cRunWhat = "TheSub" ' the name of the procedure to run Sub StartTimer() RunWhen = Now + TimeValue(0, 0, cRunIntervalSeconds) Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _ Schedule:=True End Sub Sub TheSub() '''''''''''''''''''''''' ' Your code here '''''''''''''''''''''''' MsgBox "hi this is working" StartTimer ' Reschedule the procedure End Sub 

我在这里错过了什么?

像下面这样简单的expression式也不起作用

 Sub test() Application.ontime (now() + TimeValue("0:0:5")),"test" End Sub 

您应该使用TimeSerial函数,而不是TimeValue 。

 Option Explicit Public RunWhen As Double Public Const cRunIntervalSeconds = 5 ' two minutes Public Const cRunWhat = "TheSub" ' the name of the procedure to run Sub StartTimer() RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds) Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat End Sub Sub TheSub() '''''''''''''''''''''''' ' Your code here '''''''''''''''''''''''' Debug.Print "hi this is working" StartTimer ' Reschedule the procedure End Sub 

这工作,你可以看VBE的即时窗口看到它通过。