Now here’s a curious concept. Viewing your PowerPoint slide show in a completely random order. When everything we do here at BrightCarbon is about telling your stories more effectively with a logical and linear flow it might seem like a very strange thing to want to do. So why would you want to do this?
I love PowerPoint. There, I said it and I feel better as a result, just as my therapist told me I would. I use it to create all sorts of things from the obvious presentations, to print documents, videos and even animated GIF images. I love PowerPoint even more when I can get inside it and use VBA code to make it do stuff most people don’t even know is possible.
I recently organised a birthday party for my wife and, as I have a high-quality projector mounted on the ceiling, I thought it would be cool to have a slide show of pictures from across the years playing on the wall. But pictures weren’t enough, I wanted them to be ‘presented’ with an attractive design, a timeline indicator and captions. It was an obvious choice to use PowerPoint to design the content.
The completed presentation has one slide for each of my wife’s years, which will get me into a lot of trouble! Playing it back in order was ok but I wanted to mix it up and have the slides appear in a random order to make it a bit more interesting. Jumping from college years to a baby, to an adult, back to a teenager made it more interesting than running in a linear timeline.
There’s no native feature in PowerPoint that lets you run your slides in a random order. So, I opened up the VBE (Visual Basic Editor) built into PowerPoint and wrote a quick VBA macro to do it for me.
The macro does a couple of things. It firstly works out how many slides there are in the presentation and creates an array (a bit like a table of data) in which all of the unique slide IDs are stored. You might not know, but slides in PowerPoint have a couple of identities. The one we all know is the slide number. But that changes if you move the slide around the presentation. The next one is the slide ID and this is both unique and constant. It gets created when a new slide is added to the presentation and never changes, regardless of where the slide is in the presentation.
This array of slide IDs is then shuffled like a deck of cards using a randomise function. Finally, the randomised array is used to create a custom slide show that is then set to run. And the really cool bit is that every time the macro is run, you get a different slide order.
The full VBA (Visual Basic for Applications) macro is included below and if you need to know how to use it in your presentation then check out our How to use VBA in PowerPoint article. The comments in green tell you what each part of the macro is doing.
Option Explicit
Option Base 1
'----------------------------------------------------------------------------------
' PowerPoint VBA Macro to run a slide show in a random order.
'----------------------------------------------------------------------------------
' Copyright (c) 2020 BrightCarbon Ltd. All Rights Reserved.
' Source code is provided under Creative Commons Attribution License
' This means you must give credit for our original creation in the following form:
' "Includes code created by BrightCarbon Ltd. (brightcarbon.com)"
' Commons Deed @ http://creativecommons.org/licenses/by/3.0/
' License Legal @ http://creativecommons.org/licenses/by/3.0/legalcode
'----------------------------------------------------------------------------------
' Purpose : Create and run a random slide show.
' Author : Jamie Garroch
' Date : 25MAR2020
' Website : https://brightcarbon.com/
'----------------------------------------------------------------------------------
Public Sub RunRandomSlideShow()
Dim oSld As Slide
Dim aSlides() As Variant
On Error Resume Next
With ActivePresentation
ReDim aSlides(.Slides.Count)
' Get a list of all of the slide IDs in the presentation
For Each oSld In .Slides
aSlides(oSld.SlideIndex) = oSld.SlideID
Next
' Reorder the list of slides in a random order
ShuffleArrayInPlace aSlides
' Create and run a custom slide show using the random order
With .SlideShowSettings
.NamedSlideShows("Random").Delete
.NamedSlideShows.Add "Random", aSlides
.ShowType = ppShowTypeSpeaker
.LoopUntilStopped = msoTrue
.RangeType = ppShowNamedSlideShow
.SlideShowName = "Random"
.Run
End With
End With
On Error GoTo 0
End Sub
'----------------------------------------------------------------------------------
' ShuffleArrayInPlace
' This shuffles InArray to random order, randomized in place.
' Source: http://www.cpearson.com/excel/ShuffleArray.aspx
'----------------------------------------------------------------------------------
Private Sub ShuffleArrayInPlace(InArray() As Variant)
Dim N As Long
Dim Temp As Variant
Dim J As Long
Randomize
For N = LBound(InArray) To UBound(InArray)
J = CLng(((UBound(InArray) - N) * Rnd) + N)
If N <> J Then
Temp = InArray(N)
InArray(N) = InArray(J)
InArray(J) = Temp
End If
Next N
End Sub
Each time you run the RunRandomSlideShow macro you’ll see your slides appear in a slide show in a different order. When you quit your slide show, you can then see what the macro has done by clicking the Slide Show tab in PowerPoint.
First, click the Custom Slide Show menu and choose Custom Shows…
This opens the Custom Shows window and you’ll see that a new custom show called Random has been created:
If you select this custom show and then click the Edit button you’ll see all of your slides on the left hand side and the randomly ordered list of them on the right:
Remember, each time you run the macro this order will change.
This is how the macro creates the random order slide show but how does it actually run it? Close the windows above and back in the PowerPoint Slide Show tab click the Set up Slide Show button. This opens up the settings for your slide show:
Here you’ll see on the right hand side that instead of showing All your slides, the macro has instructed PowerPoint to run a Custom show called Random. It also set the show to Loop continuously until ‘Esc’ so that it never ends!
You could use the same technique to add some spice to your PowerPoint Karaoke – also known as PowerPoint Roulette or Battledecks – an improvisation game where you give a presentation to an audience without knowing the content of the slides!
Roll the dice
In this downloadable example, you can click a button in the ribbon to randomly roll the 3D PowerPoint dice.
There you have it. Now you can go out into the world and play random slide shows to your heart’s content. And if you want to know more about macros, check out our other VBA blog articles. If you’re interested in add-ins, we have a very cool free one called BrightSlide and should you be interested in having us develop a custom solution for you, get in touch here.
Though there are lots of ways photos can be edited, one of the most common things our clients want to do with an image is to isolate the subject by removing the background. There are an increasing number of ways to do this, some using clever AI. But which is the best? Let’s find out!
As the saying goes, a picture speaks a thousand words. PowerPoint offers you multiple image sources to help you create your latest presentation masterpiece, but it isn't very consistent in how it presents them to you. Let's fix that!
How do you make sure that your graphs and charts have consistent branding across Excel, PowerPoint and Word? Learn how to create and use custom templates that support your brand identity across Microsoft Office.
This is great, thanks for sharing. I am a bit of a novice with VB and I’m trying to modify your code slightly for my own purposes. But, I cannot make it do what I need. Perhaps you could suggest how I could do these two things:
1) specify a range of slides to use (as opposed to all of them) 2) trigger the macro from a button (or only when advancing to a specific slide within the range)
Hi Paul and thanks for the questions. For the first, you’d need to modify how the array of slides is created which currently uses this bit of the code: For Each oSld In .Slides aSlides(oSld.SlideIndex) = oSld.SlideID Next The question then is “how will the range of slides be determined?” For the second part, you can trigger a publicly declared Sub procedure from a shape on a slide during a slide show by using the Insert / Links / Action / Run Macro feature in the PowerPoint ribbon. The challenge here is that the slide show is already running so calling the RunRandomSlideShow macro won’t do what you want. That makes a solution quite complex and not easy to provide here. If you would liek us to take a look at this as a project, please send us a message in the Contact page mentioning me.
I have been looking for something like this and was having trouble. I am an educator and I like to show my students flashcards and wanted to randomize the flashcards. A colleague of mine sent me to this site. This is very helpful – thank you!
Love thus! Creating materials for k teachers. Been writing a new one for each randomize. Its perfect for creating a lesson say learning counting numbers and then randomizing the flashcards for practice. I’ll try this now!
I copied your macro exactly, but it doesn’t run a new random order each time. It did a random order the first time, but each subsequent time, it ran the slides in the same mixed order as the first time, so it is no longer random. I tested this in various ways, including closing the file and the app and re-opening it, but I still got the same order.
I thought I followed the instructions perfectly, but perhaps I missed something? I have reviewed and can’t see anything I missed.
Hi S Mason. Are you running the macro each time or just running the slide show? Once the VBA code is in your file you should be able to close the VBE and run it by pressing Alt+F8 which creates a new random order and starts the slide show.
Hi James. Office content that contains macros only work on the desktop versions of their applications for Windows and macOS. You can however create interactivity within your presentation and publish as web-compatible HTML5 using the iSpring plug-in.
Hi Jamie, Your code is inspirational. I am developing randomized slides with powerpoint 2016. My presentation has multiple questions on each page and require answers from my students. I have two questions. 1.) Once I get this up and running I will like to have it on a webpage. What do I have to do to achieve this? 2.) Currently, I have the presentation saved as pptm.
What exactly am I copying into the Module box in PowerPoint? Everything from above (blue, black, & green font?) starting with “option” and ending with “end sub?” I am a complete newb, obviously & trying to randomize some flashcards for speech students. Also, does this just run automatically or do I click “next” or whatever to advance to the next slide (preferred method)? Thank you.
That’s right Kristi. All that you described is the code. The colours just indicate the meaning of various elements eg. green represents comments. Once your flash cards have been randomised you could either click next (or space-bar or return or arrow keys) manually, or go to the transition tab and set a time on the right hand side of the ribbon to automatically advance each slide.
What I want is to be able to create short PowerPoints (3 to 10 slides each). Create multiple Power Points and make a list of the PowerPoints. Then have the PowerPoint presentations run in random order on a continuous loop.
I have a “Safety Vision” display monitor set up so that employees can watch a presentation at their leisure during the workday. I have been using the “Safety Vision” to present a 5 minute loop of ONE PowerPoint, but it has been suggested that a 30 to 60-second loop followed by a DIFFERENT 30-60 second loop may go over better. If I can show a list of multiple presentations would be good… to do so in a random order would be even better. Thanks!
That’s certainly doable with VBA although quite complex as multiple files need to be managed. I wonder if an alternative method could be to create all the content in a single file and then create Custom Slide Shows for each. Then you could write some VBA code to randomize the order of the custom shows.
Thank you from the bottom of my heart! I just took a “manual” math bingo game displaying geometry figures as the caller cards that I am using as a review before the test and easily converted it to a randomized bingo game. I can easily run this from the promethean board (massive touchscreen computer) at the front of my math class room! Perfect!
Hi Jamie, nice tip with lots of potential applications.
Just curious: have you thought of developing random CrossFit workouts using a modification of the technique?
It would be great to have gifs in slides and a timer for say 40 seconds. Once the slide gets active, the timer starts countdown and the gif shows the exercise.
then a transition of say 15 seconds, to another slide.
That way one can have a workout of the day which varies and plays so that all one does is follow along.
Duration can vary from 8 to 40 minutes (the whole set of exercises), and the exercises may vary between weightlifting, gymnastics, calisthenics, obstacle race type, cardio (machines), strongman, etc.
I would think there would be a commercial interest in the product now that many need to take training home.
Hi Hamilton. There are certainly lots of potential uses for this as it stands and of course it could be extended to all sorts of other applications as you described. We typically don’t make products out of presentations but you could take this free sample and develop it further for other use cases.
This is great, thanks for sharing. I am a bit of a novice with VB and I’m trying to modify your code slightly for my own purposes. But, I cannot make it do what I need. Perhaps you could suggest how I could do these two things:
1) specify a range of slides to use (as opposed to all of them)
2) trigger the macro from a button (or only when advancing to a specific slide within the range)
Many thanks
Paul
Hi Paul and thanks for the questions. For the first, you’d need to modify how the array of slides is created which currently uses this bit of the code:
For Each oSld In .Slides
aSlides(oSld.SlideIndex) = oSld.SlideID
Next
The question then is “how will the range of slides be determined?” For the second part, you can trigger a publicly declared Sub procedure from a shape on a slide during a slide show by using the Insert / Links / Action / Run Macro feature in the PowerPoint ribbon. The challenge here is that the slide show is already running so calling the RunRandomSlideShow macro won’t do what you want. That makes a solution quite complex and not easy to provide here. If you would liek us to take a look at this as a project, please send us a message in the Contact page mentioning me.
I have been looking for something like this and was having trouble.
I am an educator and I like to show my students flashcards and wanted to randomize the flashcards.
A colleague of mine sent me to this site.
This is very helpful – thank you!
Love thus! Creating materials for k teachers. Been writing a new one for each randomize. Its perfect for creating a lesson say learning counting numbers and then randomizing the flashcards for practice. I’ll try this now!
I copied your macro exactly, but it doesn’t run a new random order each time. It did a random order the first time, but each subsequent time, it ran the slides in the same mixed order as the first time, so it is no longer random. I tested this in various ways, including closing the file and the app and re-opening it, but I still got the same order.
I thought I followed the instructions perfectly, but perhaps I missed something? I have reviewed and can’t see anything I missed.
Thoughts?
Hi S Mason. Are you running the macro each time or just running the slide show? Once the VBA code is in your file you should be able to close the VBE and run it by pressing Alt+F8 which creates a new random order and starts the slide show.
So you have to run the slide show using Alt+F8 in order to have it run a new random order each time? Just want to clarify.
Is it possible to have this kind of presentation including the macros publish on a Webpage?
Hi James. Office content that contains macros only work on the desktop versions of their applications for Windows and macOS. You can however create interactivity within your presentation and publish as web-compatible HTML5 using the iSpring plug-in.
Hi Jamie,
Many thanks for your advice. I find it useful and I will update you on my progress and findings.
Kind regard
James
Hi Jamie,
Your code is inspirational. I am developing randomized slides with powerpoint 2016. My presentation has multiple questions on each page and require answers from my students. I have two questions.
1.) Once I get this up and running I will like to have it on a webpage. What do I have to do to achieve this?
2.) Currently, I have the presentation saved as pptm.
Any thoughts.
Regards
James
See above James. I think iSpring could be your best option.
What exactly am I copying into the Module box in PowerPoint? Everything from above (blue, black, & green font?) starting with “option” and ending with “end sub?” I am a complete newb, obviously & trying to randomize some flashcards for speech students. Also, does this just run automatically or do I click “next” or whatever to advance to the next slide (preferred method)? Thank you.
That’s right Kristi. All that you described is the code. The colours just indicate the meaning of various elements eg. green represents comments. Once your flash cards have been randomised you could either click next (or space-bar or return or arrow keys) manually, or go to the transition tab and set a time on the right hand side of the ribbon to automatically advance each slide.
It works perfectly! Thank you!!
This is CLOSE to what I wanted… but not quite.
What I want is to be able to create short PowerPoints (3 to 10 slides each).
Create multiple Power Points and make a list of the PowerPoints.
Then have the PowerPoint presentations run in random order on a continuous loop.
I have a “Safety Vision” display monitor set up so that employees can watch a presentation at their leisure during the workday. I have been using the “Safety Vision” to present a 5 minute loop of ONE PowerPoint, but it has been suggested that a 30 to 60-second loop followed by a DIFFERENT 30-60 second loop may go over better. If I can show a list of multiple presentations would be good… to do so in a random order would be even better.
Thanks!
That’s certainly doable with VBA although quite complex as multiple files need to be managed. I wonder if an alternative method could be to create all the content in a single file and then create Custom Slide Shows for each. Then you could write some VBA code to randomize the order of the custom shows.
Thank you from the bottom of my heart! I just took a “manual” math bingo game displaying geometry figures as the caller cards that I am using as a review before the test and easily converted it to a randomized bingo game. I can easily run this from the promethean board (massive touchscreen computer) at the front of my math class room! Perfect!
Great to hear you’ve found a practical use for this Julie 🙂
Hi Jamie, nice tip with lots of potential applications.
Just curious: have you thought of developing random CrossFit workouts using a modification of the technique?
It would be great to have gifs in slides and a timer for say 40 seconds. Once the slide gets active, the timer starts countdown and the gif shows the exercise.
then a transition of say 15 seconds, to another slide.
That way one can have a workout of the day which varies and plays so that all one does is follow along.
Duration can vary from 8 to 40 minutes (the whole set of exercises), and the exercises may vary between weightlifting, gymnastics, calisthenics, obstacle race type, cardio (machines), strongman, etc.
I would think there would be a commercial interest in the product now that many need to take training home.
Hi Hamilton. There are certainly lots of potential uses for this as it stands and of course it could be extended to all sorts of other applications as you described. We typically don’t make products out of presentations but you could take this free sample and develop it further for other use cases.
just what I want..
Thanks a lot
Thanks for this! I am running a training online that I usually do in person, and this is enabling me to use ppt like a deck of cards 🙂
That’s great to hear Kathleen and thank you so much for letting us know you’re finding it useful.
This is wonderful and incredible and thank you for sharing it!