Search code examples
vbapowerpoint

Random number generator that always produces a number different from the previous random number


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).


Solution

  • 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