TPE
Tavvafi@gmail.com |
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
Automated VBA Solution for PPT 2007 or later
Sub BetterPDFNotes() Dim oSl As Slide Dim oNewImage As Shape Dim oOldImage As Shape For Each oSl In ActivePresentation.Slides Call oSl.Export(ActivePresentation.Path & "\" & CStr(oSl.SlideIndex) & ".EMF", "EMF") Set oOldImage = NotesPageSlidePlaceholder(oSl) If Not oOldImage Is Nothing Then Set oNewImage = oSl.NotesPage.Shapes.AddPicture( _ ActivePresentation.Path & "\" & CStr(oSl.SlideIndex) _ & ".EMF", False, True, 0, 0, 200, 200) With oNewImage .Left = oOldImage.Left .Top = oOldImage.Top .height = oOldImage.height .width = oOldImage.width .Tags.Add "TempImage", "YES" End With ' and after it's all working to perfection ' ooldimage.Delete ' or just leave the original hidden there behind the EMF End If Next End Sub Function NotesPageSlidePlaceholder(oSl As Slide) As Shape ' Returns the slide placeholder on the notes page Dim oSh As Shape For Each oSh In oSl.NotesPage.Shapes If oSh.Type = msoPlaceholder Then If oSh.PlaceholderFormat.Type = ppPlaceholderTitle Then Set NotesPageSlidePlaceholder = oSh Exit Function End If End If Next End Function
Automated VBA Solution with improvements for PPT 2010
- Dealing with the fact that PowerPoint 2010 can have multiple notes pages per slide; this works on the first page only.
- Pasting a copy of the original slide as a slide object rather than exporting to EMF and reimporting.
- Adding a line around the slide placeholder.
Sub FixUpNotePageSlideImages() Dim lOriginalView As Long Dim oSl As Slide Dim oSh As Shape Dim old_placeholder As Shape Dim oNewSh As Shape ' Store user's original view lOriginalView = ActiveWindow.ViewType ' Change to notespage view ActiveWindow.ViewType = ppViewNotesPage For Each oSl In ActivePresentation.Slides oSl.Copy ' have we already run this code? If so, the original ' slide image has been replaced and tagged: For Each oSh In oSl.NotesPage(1).Shapes If Len(oSh.Tags("NEWNOTESPLACEHOLDER")) > 0 Then ' found it Set old_placeholder = oSh Exit For End If Next If old_placeholder Is Nothing Then ' no previously replaced shape here, so get the original ' slide image placeholder: For Each oSh In oSl.NotesPage(1).Shapes If oSh.Type = msoPlaceholder Then If oSh.PlaceholderFormat.Type = ppPlaceholderTitle Then Set old_placeholder = oSh Exit For End If End If Next End If With ActiveWindow .View.GotoSlide (oSl.SlideIndex) .View.Paste End With With ActiveWindow.Selection.ShapeRange(1) .Left = old_placeholder.Left .Top = old_placeholder.Top .Width = old_placeholder.Width .Height = old_placeholder.Height .Tags.Add "NEWNOTESPLACEHOLDER", "YES" .Line.Weight = 1 End With old_placeholder.Delete Set old_placeholder = Nothing Next ' Restore original view ActiveWindow.ViewType = lOriginalView End Sub