Emmanuel Adu Gyamfi
Emmanuel Adu Gyamfi

Reputation: 145

Error in batch find and replace VBA code for Power Point slides

I'm trying to write a batch find and replace code for Power Point slides in VBA but I'm getting the following error: Compile Error Method or data member not found.

The debugger is highlighting Shapes in PP.Shapes on line 13.

I do not have much experience with VBA. I gathered ideas from:
* Getting Started with VBA in PowerPoint 2010 (Office Dev Center)
* Power Point VBA-Find & Replace (YouTube)
* "Simple Macro to import slides from a file" @ (VBA Express Forum)

Sub BatchFindReplace()
Dim shp As Shape
Dim strFileName As String
Dim strFolderName As String
Dim PP As Presentation
'Directory
strFolderName = "C:\Users\Emma\Desktop\temp1"
strFileName = Dir(strFolderName & "\*.ppt*")
Do While Len(strFileName) > 0
Set PP = Presentations.Open(strFolderName & "\" & strFileName)

'Find and Replace Code
For Each shp In PP.Shapes
If shp.HasTextFrame Then
    If shp.TextFrame.HasText Then
        shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "W", "kkk")
    End If
End If
Next

PP.Close
strFileName = Dir
Loop
End Sub

Upvotes: 1

Views: 213

Answers (1)

Siddharth Rout
Siddharth Rout

Reputation: 149305

The property .Shapes is not a member of Presentation but of Slide

'~~> Open the relevant powerpoint file
Set PP = Presentations.Open(strFolderName & "\" & strFileName)

'~~> Change this to the relevant slide which has the shape
Set PPSlide = PP.Slides(1)

For Each shp In PPSlide.Shapes
    Debug.Print shp.Name
Next shp

If you want to work with all shapes in all slides then you will have to loop through slides.

Dim sld As Slide

'~~> Open the relevant powerpoint file
Set PP = Presentations.Open(strFolderName & "\" & strFileName)

For Each sld In PP.Slides
    For Each shp In sld.Shapes
        Debug.Print shp.Name
    Next shp
Next

Upvotes: 2

Related Questions