我尝试使用以下代码来显示一系列命令运行所需的时间。在此示例中,我希望它返回“10”或类似的内容。
相反,它会返回:
发生了什么事以及如何正确格式化它?
Sub timeyWimey()
Dim t1 As Date
Dim t2 As Date
Dim timeTaken As Date
t1 = Now()
Application.Wait (Now + TimeValue("0:00:10"))
t2 = Now()
timeTaken = t2 - t1
MsgBox timeTaken
End Sub
编辑:
在一些很好的答案之后的最终代码:
Sub timeyWimey()
'Dim t1 As Double
'Dim t2 As Double
t1 = Now()
Application.Wait (Now + TimeValue("0:00:10"))
t2 = Now()
timeTaken = t2 - t1
MsgBox Format(timeTaken, "nn:ss.000")
End Sub
结果:
嘭!问题解决了!感谢大家的帮助!
最佳答案
日期在 MS Access 和 MS Excel 中以数值形式存储。因此,如果在直接窗口 (Ctrl+G) 中输入 ?Cdbl(now())
,您将得到如下数字:42195.5204050926
。
整数表示自 1899 年 12 月 30 日以来已经过去了多少天,小数表示当天已经过去了多少天。
所以在你的代码中你基本上是这样说的:
timeTaken = 42195.5222337963 - 42195.5204050926
在这个例子中,我只是检查了一次Now()
,然后在几分钟后再次检查。所以我最终得到了0.0018287037
。
现在,如果我使用 Date
变量(如您的示例中所示)来显示它,我基本上是在说0.0018287037
现在是什么时间这是 1899 年 12 月 30 日凌晨 12:02:38。
您可以通过返回直接窗口并输入 ?cdate(0.0018287037)
直观地看到这一点,您将得到如下结果:12:02:38 AM
。要更进一步,您可以输入 ?cdate(1.0018287037)
,您将得到一个结果:1899-12-31 12:02:38 AM
因此,根据您的情况,您只需更改即可:
MsgBox timeTaken
致:
MsgBox Format(timeTaken, "nn:ss")
注意:我没有注意到屏幕截图中写着“Excel”,尽管这个答案应该仍然有效。
关于VBA - 显示子程序运行所需的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31344228/