I successfully used this code within a powerpoint odule, but when I move it inside my excel module it gives me several problems. I embedded the Powerpoint application on sheet 1 of Excel. The goal is to generate the powerpoint from excel and replace the company name whenever it appears on a powerpoint slide with the new company name from an excel range.
I get error 429 ActiveX component cant create object at “For Each osld In ActivePresentation.Slides. Is my Powerpoint presentation not active? Any help would be appreciated. Using excel/Powerpoint 2010.
Sub changeme(sFindMe As String, sSwapme As String)
Dim osld As Slide
Dim oshp As Shape
Dim otemp As TextRange
Dim otext As TextRange
Dim Inewstart As Integer
For Each osld In ActivePresentation.Slides
For Each oshp In osld.Shapes
If oshp.HasTextFrame Then
If oshp.TextFrame.HasText Then
Set otext = oshp.TextFrame.TextRange
Set otemp = otext.Replace(sFindMe, sSwapme, , msoFalse, msoFalse)
Do While Not otemp Is Nothing
Inewstart = otemp.Start + otemp.Length
Set otemp = otext.Replace(sFindMe, sSwapme, Inewstart, msoFalse, msoFalse)
Loop
End If
End If
Next oshp
Next osld
End Sub
'-------------------------------------------------------------------------
Sub swap()
Dim sFindMe As String
Dim sSwapme As String
Dim ppApp As PowerPoint.Application
Dim ppPreso As PowerPoint.Presentation
'Start Powerpoint
'Look for existing instance
On Error Resume Next
Set ppApp = GetObject(, "PowerPoint.Application")
On Error Goto 0
'Create new instance if no instance exists
Set ppApp = CreateObject("Powerpoint.Application")
'Open Template in word
With Sheets("Sheet1").Shapes("Object 1").OLEFormat.Verb(Verb:=xlVerbOpen)
End With
'Make it visible
ppApp.Visible = True
sFindMe = "Name To Find"
'change this to suit
sSwapme = "New Name"
Call changeme(sFindMe, sSwapme)
'sFindMe = "<find2>"
'sSwapme = ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange
'Call changeme(sFindMe, sSwapme)
End Sub
ActivePresentationis a Powerpoint Object. It doesn’t mean anything to Excel. When you open a presentation you have to set a connection to it for Excel to relate with it. I would suggest using the below code. Also I have used Late Binding so you don’t need to add any reference to MS Powerpoint from Excel.LOGIC:
TRIED AND TESTED
Hope this helps 🙂
Sid