VBA - 显示子运行的时间

tim*_*ram 5 excel vba excel-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
Run Code Online (Sandbox Code Playgroud)

编辑:

一些伟大的答案之后的最终代码:

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
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述

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

New*_*ewd 2

日期在 MS Access 和 MS Excel 中以数值形式存储。因此,如果在直接窗口 ( Ctrl+ G) 中输入,?Cdbl(now())您将得到如下数字:42195.5204050926

整数表示自 1899 年 12 月 30 日以来已经过去了多少天,小数表示当天已经过去了多少天。

所以在你的代码中你基本上是这样说的:

timeTaken = 42195.5222337963  - 42195.5204050926
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我只是检查了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
Run Code Online (Sandbox Code Playgroud)

到:

MsgBox Format(timeTaken, "nn:ss")
Run Code Online (Sandbox Code Playgroud)

注意:我没有注意到屏幕截图中写着“Excel”,尽管这个答案应该仍然有效。

  • 扎实的解释。如果您还想要毫秒,可以附加“.000”以获得“ss.000”。请参阅http://stackoverflow.com/questions/3095407/display-milliseconds-in-excel。 (2认同)