簡體   English   中英

VBA - 顯示子運行的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM