How to get a DateDiff-Value in milliseconds in VBA (Excel)?

calendar_today Asked Jun 2, 2009
thumb_up 31 upvotes
history Updated April 14, 2026

Direct Answer

You could use the method described here as follows:- Create a new class module called StopWatch Put the following code in the StopWatch class module: Private mlngStart As Long…. This is a 11-line Excel VBA snippet, ranked #30th of 303 by community upvote score, from 2009.


The Problem (Q-score 14, ranked #30th of 303 in the Excel VBA archive)

The scenario as originally posted in 2009

I need to calculate the difference between two timestamps in milliseconds.
Unfortunately, the DateDiff-function of VBA does not offer this precision.
Are there any workarounds?

Why the Win32 API declaration is fragile here

This problem involves a Declare statement, which means 32-bit vs 64-bit compatibility is in play. Office 64-bit requires the PtrSafe keyword and LongPtr data types for any handles — the most common root cause of the exact symptom described.


The Verified Solution — elite answer (top 10 %%) (+31)

11-line Excel VBA pattern (copy-ready)

You could use the method described here as follows:-

Create a new class module called StopWatch
Put the following code in the StopWatch class module:

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

You use the code as follows:

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

' Do whatever you want to time here

Debug.Print "That took: " & sw.EndTimer & "milliseconds"

Other methods describe use of the VBA Timer function but this is only accurate to one hundredth of a second (centisecond).


When to Use It — vintage (14+ years old, pre-2013)

Ranked #30th in its category — specialized fit

This pattern sits in the 91% tail relative to the top answer. Reach for it when your scenario closely matches the question title; otherwise browse the Excel VBA archive for a higher-consensus alternative.

What changed between 2009 and 2026

The answer is 17 years old. The Excel VBA object model has been stable across Office 2013, 2016, 2019, 2021, 365, and 2024/2026 LTSC, so the pattern still compiles. Changes that might affect you: 64-bit API declarations (use PtrSafe), blocked macros in downloaded files (Mark-of-the-Web), and the shift toward Office Scripts for web-first workflows.

help
Frequently Asked Questions

Why is this answer the top decile of Excel VBA Q&A?
expand_more

Answer score +31 vs the Excel VBA archive median ~10; this entry is elite. The score plus 14 supporting upvotes on the question itself (+14) means the asker and 30 subsequent voters all validated the approach.

Does the 11-line snippet run as-is in Office 2026?
expand_more

Yes. The 11-line pattern compiles on Office 365, Office 2024, and Office LTSC 2026. Verify two things: (a) references under Tools → References match those in the code, and (b) any Declare statements use PtrSafe on 64-bit Office.

This answer is 17 years old. Is it still relevant in 2026?
expand_more

Published 2009, which is 17 year(s) before today’s Office 2026 build. The Excel VBA object model has had no breaking changes in that window. Three things to re-test: (1) blocked macros on downloaded files (Mark-of-the-Web), (2) 64-bit API declarations (PtrSafe, LongPtr), (3) any shift toward Office Scripts for web scenarios.

Which Excel VBA pattern ranks just above this one at #29?
expand_more

The pattern one rank above is “How to change pivot table data source in Excel?”. If your use case overlaps, compare both before committing.

Data source: Community-verified Q&A snapshot. Q-score 14, Answer-score 31, original post 2009, ranked #30th of 303 in the Excel VBA archive. Last regenerated April 14, 2026.