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

现在,如果我要显示使用Datevariables(如在您的示例中),基本上是说什么时间是在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