[英]VBA - Displaying how long a sub took to run
我試圖使用以下代碼顯示一系列命令運行多長時間。 在這個例子中,我預計它會以“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! 問題解決了! 謝謝大家的幫助!
日期在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
: 12:02:38 AM
: 12:02:38 AM
。 為了更進一步,你可以輸入?cdate(1.0018287037)
,你會得到一個結果說: 1899-12-31 12:02:38 AM
所以在你的情況下你可以簡單地改變:
MsgBox timeTaken
至:
MsgBox Format(timeTaken, "nn:ss")
注意:我沒有在屏幕截圖中注意到它顯示“Excel”,盡管這個答案應該仍然有效。
通常你會使用DateDiff函數來計算兩個日期之間的差異,但我認為在你的情況下你會想要別的東西,因為DateDiff不會給你毫秒。 相反,只需用Timer()替換你對“Now”函數的調用,這只是幾秒鍾(小心但是,它只給你從午夜起經過的時間,所以t2-t1可以是負數,如果你的命令過去幾天你不會得到任何有意義的結果)。
您可以嘗試定時器功能。 正如其他答案所示,可能會有一些警告。
Dim startTime As Double, endTime As Double
startTime = Timer
Application.Wait (Now + TimeValue("0:00:10"))
endTime = Timer
msgBox endTime - startTime
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.