'***
Private Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function timeGetTime Lib "WinMM.dll" () As Long
Public Sub Wait(ByVal inMilliseconds As Long)
Dim SleepTime As Long, TimeNow As Long
Dim SleepTo As Long, SleepEnd As Long
Const MaxSleep As Long = 100
TimeNow = timeGetTime()
SleepTime = inMilliseconds \ 10
If (SleepTime > MaxSleep) Then SleepTime = MaxSleep
SleepTo = TimeNow + inMilliseconds
Do
DoEvents
TimeNow = timeGetTime()
SleepEnd = SleepTo - TimeNow
If (SleepEnd <= SleepTime) Then Exit Do
Call Sleep(SleepTime)
Loop
If (SleepEnd > 0) Then Call Sleep(SleepEnd)
End Sub
'***
You can test it with something like this:
'***
Dim StartTime As Double, EndTime As Double
StartTime = Timer()
Call Wait(5000) ' Wait for 5 seconds
EndTime = Timer()
Debug.Print Format$(EndTime - StartTime, "0.000")
'***