2015-07-10 138 views
5

我想用下面的代码来显示一系列命令运行需要多长时间。在这个例子中,我预计它会回来“10”或类似的东西。VBA - 显示子运行多长时间

相反,它回来了:

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!问题解决了!谢谢大家的帮助!

回答

2

日期的数值存储在MS Access和MS Excel中。因此,如果在您的直接窗口中(Ctrl + G),请键入?Cdbl(now()),您将得到一个如下所示的数字:42195.5204050926

整个数字描述了自1899年12月30日以来经过了多少天,小数点显示了当天有多少时间已过。

因此,在你的代码,你基本上是说这样的事情:

timeTaken = 42195.5222337963 - 42195.5204050926 

在这个例子中,我只是检查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 

要:

MsgBox Format(timeTaken, "nn:ss") 

注意:我没有注意到它在截图中说“Excel”,尽管这个答案应该仍然有效。

+0

谢谢。所以这绝对解释了这个问题。让我稍微想一想。 – timbram

+0

那么,小数点后的数字格式(通过当天的数量)是如何工作的?如果重新运行我的脚本,保持一切为双打,我知道已经过去的时间(10秒)是0.00005787036934635。这是一天中的某个比例吗? – timbram

+0

我附加了如何将双重格式化到我的答案结尾。而'0.00005787036934635'基本上是一天的百分比。例如,如果它是0.5,那将是12:00noon,因为一天的一半已经过去了。 – Newd

1

通常情况下,您会使用DateDiff function来计算两个日期之间的差异,但我认为在您的情况下您需要其他的东西,因为DateDiff不会给你毫秒。相反,只需将您的呼叫替换为Timer()的“现在”功能,这只是几秒钟(但请注意,它只会给您自午夜以来的时间,因此t2-t1可能为负数,并且如果您的命令持续多次几天你不会得到任何有意义的结果)。

+0

谢谢,这将很适合我的目的。 – timbram

1

您可以尝试定时器功能。正如其他答案所示,可能会有一些警告。

Dim startTime As Double, endTime As Double 
startTime = Timer 

Application.Wait (Now + TimeValue("0:00:10")) 

endTime = Timer 
msgBox endTime - startTime 
+0

我讨厌它,我喜欢它! :)我讨厌与时间混淆是VBA中的一大痛苦!尽管如此,处理时间在任何语言中都可能是一个复杂的野兽! 这种方法的工作原理,对于我目前的过程,我没有太多担心毫秒,并且不会在夜间或任何事情上运行它。 – timbram