我按照https://www.thespreadsheetguru.com/the-code-vault/2015/1/28/vba-calculate-macro-run-time在VBA中运行了一些代码并返回了一个负值:
-20439秒
有谁知道为什么?它实际上跑了大约18小时(第二天1500 - 0900)
Option Explicit
Sub CalculateRunTime_Minutes()
'PURPOSE: Determine how many minutes it took for code to completely run
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim StartTime As Double
Dim MinutesElapsed As String
'Remember time when macro starts
StartTime = Timer
'*****************************
'Insert Your Code Here...
'*****************************
'Determine how many seconds code took to run
MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")
'Notify user in seconds
MsgBox "This code ran successfully in " & MinutesElapsed & " minutes", vbInformation
End Sub
答案 0 :(得分:4)
代码使用Timer
。
Timer
返回一个Single,表示自午夜起经过的秒数。 SyntaxTimerRemarks在Microsoft Windows中,Timer函数返回一秒的小数部分。在Macintosh上,计时器分辨率是一秒钟。 MSDN
因此,如果您开始在15:00
运行,则代码会返回有意义的内容,如果您最终到23:59
。如果您在第二天09:00
结束,则会返回负值。
您可以重建代码,以便将日期记入帐户。使用Now
,它会返回日期和时间 - 21.02.2018 10:33:55
这看起来是一个很好的选择:
Sub WorkstAtMidnight()
Dim StartTime As Date
StartTime = Now()
'Do something incredible
MsgBox Round((Now() - StartTime) * 24 * 60 * 60, 0)
'24 hours times 60 minutes times 60 seconds (usually I just do 24*3600)
End Sub
答案 1 :(得分:2)
另一种选择:
MinutesElapsed = Format((Timer - StartTime) / 86400 + IIf(Timer < StartTime, 1, 0), "hh:mm:ss")
这可以精确地记录小时和分钟,直到一整天(即它在运行时间24小时后重置)。在此之后真正的问题是为什么你的代码需要这么长时间!