定时VBA代码返回负时间

时间:2018-02-21 09:29:48

标签: excel vba excel-vba timer negative-number

我按照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

2 个答案:

答案 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小时后重置)。在此之后真正的问题是为什么你的代码需要这么长时间!