VBA - 显示子运行的时间

时间:2015-07-10 15:06:51

标签: excel vba excel-vba

我正在尝试使用以下代码来显示一系列命令运行的时间。在这个例子中,我预计它会以“10”或类似的东西返回。

相反,它回来了:

enter image description here

发生了什么以及如何正确格式化?

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

结果:

enter image description here

BAM!问题解决了!谢谢大家的帮助!

3 个答案:

答案 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