我需要計算兩個時間戳之差(以毫秒爲單位)。 不幸的是,VBA的DateDiff函數不提供這種精度。 是否有任何解決方法?如何在VBA(Excel)中以毫秒爲單位獲取DateDiff值?
18
A
回答
41
你可以使用方法描述here如下: -
創建一個名爲StopWatch
將下面的代碼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
您使用的代碼如下:
Dim sw as StopWatch
Set sw = New StopWatch
sw.StartTimer
' Do whatever you want to time here
Debug.Print "That took: " & sw.EndTimer & "milliseconds"
其他方法描述使用VBA定時器功能,但這隻能精確到百分之一秒(釐秒)。
-1
除了通過AdamRalph(GetTickCount()
)中描述的方法,你可以這樣做:
- 使用
QueryPerformanceCounter()
和QueryPerformanceFrequency()
API函數
How do you test running time of VBA code? - 或者,對於環境,而無需訪問的Win32 API(如VBScript):
http://ccrp.mvps.org/(查看「高性能定時器」的可安裝COM對象的下載部分,它們是免費的。)
8
如果你只需要在Centiseconds中花費的時間,那麼你就不需要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
1
的GetTickCount和性能計數器需要.. 對於millisenconds你可以用一些這樣的事..
'at the bigining of the module
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
'In the Function where you need find diff
Dim sSysTime As SYSTEMTIME
Dim iStartSec As Long, iCurrentSec As Long
GetLocalTime sSysTime
iStartSec = CLng(sSysTime.wSecond) * 1000 + sSysTime.wMilliseconds
'do your stuff spending few milliseconds
GetLocalTime sSysTime ' get the new time
iCurrentSec=CLng(sSysTime.wSecond) * 1000 + sSysTime.wMilliseconds
'Different between iStartSec and iCurrentSec will give you diff in MilliSecs
0
您還可以使用=NOW()
公式calcilated在細胞:
Dim ws As Worksheet
Set ws = Sheet1
ws.Range("a1").formula = "=now()"
ws.Range("a1").numberFormat = "dd/mm/yyyy h:mm:ss.000"
Application.Wait Now() + TimeSerial(0, 0, 1)
ws.Range("a2").formula = "=now()"
ws.Range("a2").numberFormat = "dd/mm/yyyy h:mm:ss.000"
ws.Range("a3").formula = "=a2-a1"
ws.Range("a3").numberFormat = "h:mm:ss.000"
var diff as double
diff = ws.Range("a3")
0
道歉喚醒這個老帖子,但我得到了一個答案:
寫這樣的毫秒功能:
Public Function TimeInMS() As String
TimeInMS = Strings.Format(Now, "HH:nn:ss") & "." & Strings.Right(Strings.Format(Timer, "#0.00"), 2)
End Function
使用此功能在您的子:
Sub DisplayMS()
On Error Resume Next
Cancel = True
Cells(Rows.Count, 2).End(xlUp).Offset(1) = TimeInMS()
End Sub
相關問題
- 1. 如何在AngularJS中以毫秒爲單位獲取時間
- 2. 在oracle中獲取日期差值(以毫秒爲單位)
- 3. DATEDIFF()以毫秒爲單位浮點或小數點秒
- 4. excel vba中以毫秒爲單位的複製日期
- 5. 以秒,毫秒顯示datediff
- 6. 如何以毫秒或納秒爲單位在C++中獲取時間
- 7. 如何以毫秒爲單位獲取NSEvent時間戳?
- 8. NetStream.seek以毫秒爲單位
- 9. TimeSpan.ParseExact以毫秒爲單位
- 10. 使用SPARQL獲取當前時間(以秒/毫秒爲單位)?
- 11. 以毫秒爲單位的TImespan,以分鐘和秒爲單位
- 12. 以毫秒爲單位檢測秒數
- 13. 在Excel中增加時間以毫秒爲單位
- 14. 獲取C中的當前時間(以毫秒爲單位)?
- 15. 如何在java中以毫秒爲單位獲取當前小時?
- 16. 在Swift中,如何獲取UNIX Epoc時間戳,以毫秒爲單位?
- 17. 如何以秒爲單位返回以毫秒爲單位的日期?
- 18. 如何獲得以毫秒爲單位的時間?
- 19. 如何獲得兩個QDateTimes之差(以毫秒爲單位)?
- 20. 如何獲得以毫秒爲單位的硬件時間
- 21. 如何獲得UTC時間(以毫秒爲單位)
- 22. 如何轉換此SAS日期值(以毫秒爲單位)
- 23. 以毫秒爲單位獲取Dateobject時間戳
- 24. 以毫秒爲單位獲取當前時間Cocos2d
- 25. 以毫秒爲單位獲取ViewPager視圖的時間
- 26. Laravel獲取created_at以毫秒爲單位的時間戳
- 27. 以毫秒爲單位獲取錯誤的行ID sql
- 28. Linux命令獲取以毫秒爲單位的時間
- 29. 以毫秒爲單位獲取兩個DateTime實例的差異
- 30. 如何從android中的timepicker獲取以毫秒爲單位的當前時間?
注意的是,雖然`GetTickCount`在millseconds解決,其具有約16毫秒一個精度[請參閱此MSDN文章](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v=vs.85%29.aspx) – 2015-01-26 02:57:11
只是一個問題:如何計算2個值之間的時間差存儲在Excel中? – patex1987 2017-01-18 10:00:08