1

This is an issue with Powerpoint VBA. I want to have some random phrases to show up in a powerpoint presentation. I want the phrases to show in a text box inside a slide in the presentation I have a preset list of phrases. The code goes well 'most' of the time: I declare variables, get them properly loaded with values. The problem comes when I try to assign the random quote to the powerpoint object. The code error is "Runtime error 424" / Object required But I'm not able to debug the error. Could somebody help here? Thanks. This is the code:

Sub RandomPhrase()
   Dim phrases As Variant
   Dim phraseCount As Long   
   Dim randomIndex As Long   
   Dim selectedPhrase As String

   phrases = Array("Peace and love…", "Have a good day…", "Happy Holiday…", "Blessings…", "One day at a time…", "Save for rainy days…")
   phraseCount = UBound(phrases) ' or UBound(phrases) - LBound(phrases) + 1 
   ' Generate a random index
   randomIndex = Int((phraseCount * Rnd) + 1)
   ' Get the random phrase   
   selectedPhrase = phrases(randomIndex)
  ' Display the phrase in the textbox (assuming the textbox is named "TextBox19")
   With ThisPresentation.Slides(1).Shapes("TextBox19").TextFrame.TextRange  <<error 424 in this line>>
        .Text = selectedPhrase
   End With
End Sub

2 Answers 2

1

There is no ThisPresentation in PPT VBA

See for example - How to simulate ThisPresentation in PowerPoint VBA

Sign up to request clarification or add additional context in comments.

1 Comment

That thread deals with, at root, getting a reference to a loaded PowerPoint add-in, not to a presentation. OP's question seems concerned with getting a reference to the current presentation; for that, substituting ActivePresentation for ThisPresentation will work.
1

Random Phrases

  • Either use ActivePresentation instead of ThisPresentation, or use the safer option covered in the link posted by Tim Williams.
' Use 'Option Explicit' at the top of each module. It will force you to declare
' all variables, but it will show you mistakes at compile time.
' In your particular case, the (compile) error would be
'     'Compile error: Variable not defined',
' and 'ThisPresentation' would be highlighted.
Option Explicit
'Option Base 1 ' not recommended (default is 0)
   ' An array created by the 'Array()' function is zero-based unless
   ' 'Option Base' is set to '1' (see above) when it is one-based;...

Sub RandomPhrase()
   
   ' ...To ensure a zero-based array no matter the value set by 'Option Base',
   ' use 'VBA.Array()' instead of 'Array()'.
   Dim Phrases() As Variant: Phrases = VBA.Array( _
       "Peace and love…", "Have a good day…", "Happy Holiday…", _
       "Blessings…", "One day at a time…", "Save for rainy days…")
   
   ' From the Docs:
   ' If 'Randomize' is not used, the 'Rnd' function (with no arguments) uses
   ' the same number as a seed the first time it is called,
   ' and thereafter uses the last generated number as a seed value.
   Randomize

   ' Generate a random index.
   ' From the Docs:
   '     'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)'
   ' Since the lower limit of a zero-based array is 0, you can simplify:
   '     'Int((upperbound - 0 + 1) * Rnd + 0)'
   '     'Int((upperbound + 1) * Rnd)'
   Dim RandomIndex As Long: RandomIndex = Int((UBound(Phrases) + 1) * Rnd) ' 0-5
   ' You might argue the following is the same:
   'RandomIndex = Int((UBound(Phrases) * Rnd) + 1)
   ' It isn't! It returns a random integer between 1 to 5 (0 not included).
   
   ' Store the random phrase in a variable.
   Dim SelectedPhrase As String: SelectedPhrase = Phrases(RandomIndex)
   'Debug.Print RandomIndex, SelectedPhrase
  
  ' Display the phrase in the textbox ("TextBox19").
   ActivePresentation.Slides(1).Shapes("TextBox19") _
       .TextFrame.TextRange.Text = SelectedPhrase

End Sub

1 Comment

Thanks, It works great.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.