Hi John,

Thanks for the suggestion, however, Shyam Pillai's SetTimer code counts from 1 upward. I tried to modify to count from 30 downward by initializing the SecondCtr = 30. The code keeps crashing on me.

Is there something I am doing incorrectly?

Option Explicit
' API Declarations
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long ' Public Variables Public SecondCtr As Integer
Public TimerID As Long Public bTimerState As Boolean
Sub TimerOnOff()
If bTimerState = False Then TimerID = SetTimer(0, 0, 1000, AddressOf TimerProc) If TimerID = 0 Then MsgBox "Unable to create the timer", vbCritical + vbOKOnly, "Error" Exit Sub End If bTimerState = True Else TimerID = KillTimer(0, TimerID) If TimerID = 0 Then MsgBox "Unable to stop the timer", vbCritical + vbOKOnly, "Error" End If bTimerState = False End If End Sub
' The defined routine gets called every nnnn milliseconds.
Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long) SecondCtr = 30 SecondCtr = SecondCtr - 1 ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange.Text = CStr(SecondCtr) End Sub