如何在VBA(Excel)中以毫秒为单位获取DateDiff-Value?

Flo*_*ian 20 excel vba datediff excel-vba

我需要计算两个时间戳之间的差异,以毫秒为单位.不幸的是,VBA的DateDiff函数不提供这种精度.有没有解决方法?

Ada*_*lph 44

您可以使用此处描述的方法如下: -

创建一个名为StopWatch Put的新类模块将以下代码放入StopWatch类模块中:

Private mlngStart As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub StartTimer()
    mlngStart = GetTickCount
End Sub

Public Function EndTimer() As Long
    EndTimer = (GetTickCount - mlngStart)
End Function
Run Code Online (Sandbox Code Playgroud)

您使用以下代码:

Dim sw as StopWatch
Set sw = New StopWatch
sw.StartTimer

' Do whatever you want to time here

Debug.Print "That took: " & sw.EndTimer & "milliseconds"
Run Code Online (Sandbox Code Playgroud)

其他方法描述了VBA定时器功能的使用,但这仅精确到百分之一秒(厘秒).

  • 请注意,虽然`GetTickCount`以毫秒为单位解析,但其准确度约为16毫秒[请参阅此MSDN文章](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v=vs. 85%29.aspx) (4认同)

Oor*_*ang 11

如果您只需要以厘秒为单位的时间,则不需要TickCount API.您可以使用所有Office产品中存在的VBA.Timer方法.

Public Sub TestHarness()
    Dim fTimeStart As Single
    Dim fTimeEnd As Single
    fTimeStart = Timer
    SomeProcedure
    fTimeEnd = Timer
    Debug.Print Format$((fTimeEnd - fTimeStart) * 100!, "0.00 "" Centiseconds Elapsed""")
End Sub

Public Sub SomeProcedure()
    Dim i As Long, r As Double
    For i = 0& To 10000000
        r = Rnd
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)