So I've been working on a Vocabulary Soccer game for my students on PowerPoint. Thanks to John Korchok (Display random number in PowerPoint using VBA) I was able to implement a VBA code that provides me with a random number when I hit a certain shape (necessary in order to let my students know whose turn it is). The code looks like this and works perfectly fine:
Sub ShapeNumber()
Dim X As Long
Dim ShapeNumber As String
Dim oSlide As Slide
Dim oShape As Shape
X = 30
Randomize
ShapeNumber = Int((X * Rnd) + 1)
For Each oSlide In ActivePresentation.Slides
For Each oShape In oSlide.Shapes
If oShape.Name = "RandomNumber Shape" Then
oShape.TextFrame.TextRange.Text = ShapeNumber
End If
Next oShape
Next oSlide
End Sub
I've been wondering if the code could be modified so that it always produces a number different from the number that was generated the last time. In practice I've realized that my students tend to be confused when I hit the shape and nothing changes (they don't know if it's the same number again or whether it simply didn't work).
You can keep track of the last number:
Dim LastNumber As Long
Sub ShapeNumber()
Dim X As Long
Dim ShapeNumber As Long
Dim oSlide As Slide
Dim oShape As Shape
X = 30
Randomize
Do
ShapeNumber = CLng((X * Rnd) + 1)
Loop While ShapeNumber = LastNumber
LastNumber = ShapeNumber
For Each oSlide In ActivePresentation.Slides
For Each oShape In oSlide.Shapes
If oShape.Name = "RandomNumber Shape" Then
oShape.TextFrame.TextRange.Text = ShapeNumber
End If
Next oShape
Next oSlide
End Sub