VBA – 显示一个子文件运行的时间
我正在尝试使用下面的代码来显示一系列命令运行多长时间。 在这个例子中,我期望它回到“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! 问题解决了! 感谢大家的帮助!
date的数据存储在MS Access和MS Excel中。 所以,如果你在你的直接窗口( Ctrl + G )键入?Cdbl(now())
你会得到一个这样的数字: 42195.5204050926
。
整个数字显示了自12月30日以来的1899年已经过了多less天了,小数点显示了当天有多less日子过去了。
所以在你的代码中你基本上是这样说的:
timeTaken = 42195.5222337963 - 42195.5204050926
在这个例子中,我刚刚检查了Now()
,几分钟后再次检查。 所以我结束了0.0018287037
。
现在,如果我要显示使用Date
variables(如在您的示例中),基本上是说什么时间是在0.0018287037
12月30日12:02:38 AM 0.0018287037。
您可以通过返回到您的直接窗口并键入?cdate(0.0018287037)
来直观地看到此结果,您将得到如下结果: 12:02:38 AM
: 12:02:38 AM
: 12:02:38 AM
。 进一步,你可以input?cdate(1.0018287037)
,你会得到一个结果: 1899-12-31 12:02:38 AM
所以在你的情况下,你可以简单地改变:
MsgBox timeTaken
至:
MsgBox Format(timeTaken, "nn:ss")
注:我没有注意到它的截图说“Excel”,虽然这个答案应该仍然有效。
通常你会使用DateDiff函数来计算两个date之间的差异,但我认为在你的情况下,你会想要别的东西,因为DateDiff不会给你毫秒。 相反,只需用Timer()函数replace你的调用函数即可,这只需要几秒钟(但是请注意,它只是给你自午夜以来的时间,所以t2-t1可以是负的,如果你的命令过去几天你不会得到任何有意义的结果)。
您可以尝试计时器function。 如其他答案所示,可能有一些警告。
Dim startTime As Double, endTime As Double startTime = Timer Application.Wait (Now + TimeValue("0:00:10")) endTime = Timer msgBox endTime - startTime