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!问题解决了!谢谢大家的帮助!
日期在 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”,尽管这个答案应该仍然有效。
归档时间: |
|
查看次数: |
795 次 |
最近记录: |