Timer controls can be practical when you need to add a small delay in program execution. However, if you need the delay in a class module (instead of on a form), the actual control can be hard to get at. Instead, use these functions in a single code module:
Option Explicit Private Declare Function SetTimer Lib "user32" (ByVal _ hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse _ As Long, ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal _ hWnd As Long, ByVal nIDEvent As Long) As Long Private m_cb As Object Public Function timerSet(lTime As Long, cb As Object) _ As Long Set m_cb = cb timerSet = SetTimer(0, 0, lTime, AddressOf _ timerProcOnce) End Function Private Sub timerProcOnce(ByVal lHwnd As Long, ByVal _ lMsg As Long, ByVal lTimerID As Long, ByVal lTime _ As Long) On Error Resume Next Call KillTimer(0, lTimerID) m_cb.cbTimer End Sub
The class module then calls the function like this:
... timerSet 10, Me ...
After 10 milliseconds, the code triggers the cbTimer method in the class module:
Public Sub cbTimer() ' Do some stuffEnd Sub
You can also use the function on forms instead of the intrinsic Timer control.