I've written the code to loop through a presentation's slides and then through it's shapes. If things are empty or invisible, I delete them.
However it's not delete all emply plave holders. It will do it on a second or third run.
Sub RemoveEmptyShapes()
Dim slide As slide
Dim shp As Shape
For Each slide In ActivePresentation.Slides
For Each shp In slide.Shapes
If shp.Type = msoAutoShape Or shp.Type = msoTextBox Or shp.Type = msoPlaceholder Then
If shp.Type = msoPlaceholder And shp.TextFrame2.TextRange.Text = "" Then
shp.Delete
ElseIf shp.Type <> msoPlaceholder And shp.Fill.Visible = False And shp.Line.Visible = False And shp.TextFrame2.TextRange.Text = "" Then
shp.Delete
End If
End If
Next shp
Next slide
End Sub