How to Create a Count up & Countdown Timer in PowerPoint using VBA

❎ No manual animations! We are going to code the timer in PowerPoint!

How to Make a Countdown Timer in PowerPoint without Animations

We will be learning how to create a countdown timer in Microsoft PowerPoint using VBA Macros. You don't have to sit and tediously create separate text boxes for each number and animate them. Let me show you how to use PowerPoint in a smarter manner.

You can also download the Free PowerPoint Countdown Timer Template and embed them in your Presentations or PowerPoint Games to make them more interactive and fun!

Countdown timer ppt vba
Total Time Needed: 5 minutes


- Microsoft PowerPoint
- Hyperlinks


- Sound Effects

Here is how we create an Interactive PowerPoint Quiz Game:

Step 1: Create Countdown Shape

Insert a rectangle shape in the first slide. Go to Select | Selection Pane and double click the name of the shape and rename it to countdown.

Step 2: Open Visual Basic Editor

Windows: Office 2010 and above: File | Options | Customise Ribbon | ☑ Developer
Now under the Developer Tab, choose Visual Basic.
MacOS: Office 2011 or 2016: Tools | Macro | Visual Basic Editor

This will open the Visual Basic Editor to input our code. If your Microsoft Office version isn't mentioned above, click here. Note that VBA works only on Windows and MacOS.

Step 3: Paste VBA Macro Code

Copy and paste the following VBA Macro Code into the Visual Basic Editor:

					Sub countdown()

Dim time As Date
time = Now()

Dim count As Integer
count = 30 'assuming 30 seconds

time = DateAdd("s", count, time)

Do Until time < Now()
ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = Format((time - Now()), "hh:mm:ss")
End Sub

We need to run this VBA Macro when we click on this shape in Slide Show Mode. To do this, select the shape, go to Insert | Actions | Run Macro | countdown

Now, go to Slide Show | From Beginning and click the shape, you will see that the code is triggered and your countdown timer starts running! You can also now customise the shape’s colours and fonts.

How to create a Countdown Timer in PowerPoint?

The following video tutorial goes into the details of the VBA Code of the Countdown Timer. It also shows how we can have the Countdown Timer span across multiple slides of the presentation. We can also trigger an action to occur when the time is up.

Play Video

The possibilities are endless with VBA in PowerPoint to customise your countdown timer. You can even make a count-up timer! Following are a few popular requests and their corresponding VBA Codes.

VBA Code for Countdown Timer

					Dim time As Date
time = Now()

Dim count As Integer
count = 30 'assuming 30 seconds
time = DateAdd("s", count, time) 'adding 30 seconds

Now() refers to the current date and time. It is stored in the variable called time. We then add 30 seconds to time. Hence, we shall refer to time as the future time.

Let us also understand more about the items present within the  DateAdd() function.

  • "s"  the unit of what we are adding.
  • count → how much should be added.
  • timeto what it should be added.

Line 6 of the code translates to ‘add 30 seconds to time‘, if you wanted to add 30 minutes instead of 30 seconds, we would have to change "s" to "n".

To provide an example, if the time currently stored is 00:00:00, it changes to 00:00:30 once 30 seconds is added to it. Hence, the time stored is 30 seconds into the future.

					Do Until time < Now()

A conditional loop is present to update the text within the countdown shape. The condition is that the loop must continue until Now() becomes greater than time. To continue the example, as the current time ticks from 00:00:00 to 00:00:30 the loop occurs, however, once it is 00:00:31, the loop stops as the current time has become greater than our set future time.

To summarise, we wait for the current time to catch up with the future time, and until that happens, we update the countdown shape with the difference between the future time and the current time.

					ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = Format((time - Now()), "hh:mm:ss")

Customising Countdown Timer Format

The following are the syntax for various formats of displaying time in VBA. If you want more detailed information about the Format Function, you can refer to the documentation.

Use the format "nn:ss" if you want the minutes and seconds. In case you do not want a leading zero for minutes, you can use "n:ss".

Note that "mm:ss" would not work. Generally. m stands for months and n stands for minutes. However,  m is referred to as minutes only when it is present after h.

Use the format "ss" if you want only the seconds to be visible.

Use the format "hh:nn:ss" or "hh:mm:ss" if you want the hours, minutes and seconds to be visible.

Use the format "yy:mm:ww:dd" in your PowerPoint Countdown Timer. This would be more suited if you had to countdown to a particular date and time in the future.

Notification on Completion of Countdown

Once the current time surpasses the future time, we can trigger a MsgBox pop-up to notify us that the countdown is over. This is possible with an if-then condition present within the Do Loop. Instead of a message box, you can also redirect the presentation to a certain slide or play a sound effect.

					If time < Now() Then
'add your code here
MsgBox "Time Up!"
End If

Change Countdown Value in Slide Show Mode

If you want to change the countdown value directly in Slide Show Mode without touching the VBA Code, we can add an ActiveX Element Textbox named TextBox1 in our slide. We can type the number of seconds we would want the countdown to occur within it. This input is going to be the value of the variable count. We can read the input using the following code:

					count = ActivePresentation.Slides(1).Shapes("TextBox1").OLEFormat.Object.Value

If you’re creating a PowerPoint Template and want the user to input a custom time, we can take the text of a particular shape and make that the value of count. We can also place the shape outside the slide or on a separate slide. Let us name this shape TimeLimit

					count = ActivePresentation.Slides(1).Shapes("TimeLimit").TextFrame.TextRange

Countdown Timer for a Specific Date or Time

					Sub countdown()

Dim time As Date
'change the date and time within the brackets
'currently it is 13 October 2022, 3 AM
time = DateSerial(2022, 10, 13) + TimeSerial(3, 0, 0)

Do Until time < Now()
ActivePresentation.Slides(1).Shapes("countdown").TextFrame.TextRange = DateDiff("d", Now(), time) & " Days " & Format((time - Now()), "hh:mm:ss")
End Sub

Timer Across Multiple PowerPoint Slides

In order to embed the same countdown timer throughout multiple PowerPoint Slides: if there is a timer for 30 seconds and we go to the next slide after 10 seconds, the timer in the slide should resume the countdown from 20.

To accomplish this, we would need to add a For Loop. All the slides in the range of i (in this case: 1 to 5) will be updated until the current time passes the future time.

					For i = 1 To 5
ActivePresentation.Slides(i).Shapes("countdown").TextFrame.TextRange = Format((time - Now()), "ss")
Next i

Increase Countdown Timer by Adding Additional Time in Slide Show Mode

We can also increase or decrease the countdown timer while in PowerPoint Slide Show Mode. This feature is commonly used by teachers playing PowerPoint Games in their classroom. For example, while playing a timed quiz game, the time limit can be decreased on click of a wrong answer. Similarly, the countdown timer can also be increased.

Initially, we need to declare the variable time above all the sub-routines. This will allow us to reference the same variable within various other sub-routines: AddTime or SubtractTime. Since we are declaring it once, we do not have to declare it once more within the sub-routines.

					Global time As Date

Sub countdown()
time = Now()
time = DateAdd("s", 30, time) 'assuming 30 seconds

Do Until time < Now()
ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = Format((time - Now()), "hh:mm:ss")
End Sub

We can modify the time variable using the DateAdd function. The following sub-routines will increase or decrease the countdown timer. The macro can be run on click of another shape.

					Sub AddTime()
time = DateAdd("s", 10, time) 'increase timer by 10 seconds
End Sub
					Sub SubtractTime()
time = DateAdd("s", -10, time) 'decrease timer by 10 seconds
End Sub

Show only Seconds in Countdown Timer

If you have a countdown timer for 2 minutes, it would show as 02:00 till 00:00. However, if you edit the code such that only seconds are shown by changing the format to "ss", you would notice that the countdown timer starts with 60 and ends at 00 and repeats once more! That is because the "ss" format can’t show above 60 seconds.

We can go about this by using the DateDiff function. Now, the countdown timer will start from 120 and end at 0.
					Sub countdown()

Dim time As Date
time = Now()
time = DateAdd("s", 120, time)

Do Until time < Now
ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = DateDiff("s", Now(), time)

End Sub


VBA Code for Count Up Timer

Similarly, we can also make a Count Up Timer in PowerPoint using VBA Codes. In this case, we have three different parts:

  • time1 stores the time of when the macro is run
  • time2 stores the future time of when the count up should be over
  • Now() is a dynamic function. It always shows the current time.

To give an example, if I run the following VBA Code of the 30 Seconds Count Up Timer at midnight, which is 00:00:00, time1 would be 00:00:00; and time2 would be 00:00:30

					Sub countup()

Dim time1 As Date, time2 as Date
time1 = Now()
time2 = Now()

Dim count As Integer
count = 30 'assuming 30 seconds'
time2 = DateAdd("s", count, time2)

Do Until time2 < Now() 
ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = Format((Now() - time1), "hh:mm:ss")
End Sub

The text within the shape is the difference between the current time (which keeps increasing) and time1 (constant: the time at which the code was run), and hence as the difference keeps widening, the count up occurs. The loop continues until the current time becomes greater than time2.

🎯 In this tutorial