我正在尝试使用以下代码来显示一系列命令运行的时间。在这个例子中,我预计它会以“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
结果:
BAM!问题解决了!谢谢大家的帮助!
答案 0 :(得分:2)
日期在MS Access和MS Excel中存储为数值。因此,如果在您的即时窗口( Ctrl + G )中输入?Cdbl(now())
,您将得到如下数字:42195.5204050926
。
整数表示自1899年12月30日以来经过了多少天,小数表示当天已经过了多少天。
所以在你的代码中你基本上是这样说的:
timeTaken = 42195.5222337963 - 42195.5204050926
在这个例子中,我刚刚检查了Now()
一次,然后几分钟后再次检查。所以我最终得到了 0.0018287037
。
现在,如果我使用Date
变量来显示,例如在您的示例中,我基本上说的是在1899年12月30日的 0.0018287037
的时间,上午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”,但这个答案应该仍然有效。
答案 1 :(得分:1)
通常你会使用DateDiff function计算两个日期之间的差异,但我认为在你的情况下你会想要别的东西,因为DateDiff不会给你毫秒。相反,只需用Timer()替换你对“现在”功能的调用,这只是几秒钟(小心但是,它只给你从午夜起经过的时间,所以t2-t1可以是负数,如果你的命令持续数天你将得不到任何有意义的结果。)
答案 2 :(得分:1)
您可以尝试定时器功能。正如其他答案所示,可能会有一些警告。
Dim startTime As Double, endTime As Double
startTime = Timer
Application.Wait (Now + TimeValue("0:00:10"))
endTime = Timer
msgBox endTime - startTime