Skip to main content

Blocking and non-blocking wait function in Visual Basic

This code snippet demonstrates how to pause the execution for the specified amount of time (in milliseconds).

Function can be either blocking or unblocking (with DoEvents)

#If VBA7 Then
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems
#End If

Sub main()

Debug.Print Now
Wait 20000, False
Debug.Print Now

End Sub

Sub Wait(period As Long, blocked As Boolean)

If blocked Then
Sleep period
Else
Const STEP As Long = 100

If period > STEP Then

Dim i As Long

For i = 0 To period Step STEP
Sleep STEP
DoEvents
Next

Else
Sleep period
End If

End If

End Sub