Programmatically Publishing Slides in PowerPoint 2010
Handy Programming Tips for Microsoft PowerPoint 2010: Learn how to publish some or all of the slides in Microsoft PowerPoint 2010.
Last modified: May 19, 2011
Applies to: Office 2010 | PowerPoint 2010 | VBA
Published: June 2011
Provided by: Frank Rice, Microsoft Corporation
Publishing slides as individual presentations enable a number of scenarios that include viewing the slides in a browser by using the Microsoft PowerPoint Web App. In this topic, you programmatically publish all of the slides in a presentation and then publish a range of slides as separate PPTX files. To complete this task, you must do the following:
In this task, you open a PowerPoint 2010 presentation, open the Visual Basic Editor, and then insert a standard module.
To add a standard module to a PowerPoint presentation
On the Developer tab, click Visual Basic to open the Visual Basic Editor.
If you do not see the Developer tab in PowerPoint, click the File tab, and then click Options. In the categories pane, click Popular, select Show Developer tab in the Ribbon, and then click OK.
On the Insert menu, click Module. This adds Module1 to the Projects pane on the left side of the Visual Basic Editor.
In this task, you add programming code to the Visual Basic Editor.
To add code to the Visual Basic Editor
In the Projects pane, click Module1.
Paste or type the following Microsoft Visual Basic for Applications (VBA) code into the module window.
Sub PublishSlidesDemo() ' Demonstrate the Presentation.PublishSlides method. ' The library URL can either be a file system path, or ' a link to a SharePoint Slide Library. For this demonstration, ' use a local file path. ' Modify this path to meet your own needs: Const libraryUrl As String = "C:\Temp\" ' Publish all the slides: PublishSlideRange libraryUrl, True ' Publish a range of slides: ' PublishSlideRange libraryUrl, True, 2, 5 End Sub Sub PublishSlideRange(libraryUrl As String, Optional OverWrite As Boolean = True, _ Optional startSlide As Variant, Optional endSlide As Variant) If IsMissing(startSlide) And IsMissing(endSlide) Then ' Neither endpoint specified. Use ActivePresentation.PublishSlides ActivePresentation.PublishSlides libraryUrl, OverWrite Else If IsMissing(startSlide) Then startSlide = 1 End If If IsMissing(endSlide) Then endSlide = ActivePresentation.Slides.Count End If ' Make sure the values are in a reasonable range: If startSlide < 1 Then startSlide = 1 End If If endSlide > ActivePresentation.Slides.Count Then endSlide = ActivePresentation.Slides.Count End If Dim rng As SlideRange ' Create an array containing a list of all the slides to publish: ReDim slidesToPublish(1 To (endSlide - startSlide + 1)) As Integer Dim counter As Integer counter = 1 Dim i As Integer For i = startSlide To endSlide slidesToPublish(counter) = i counter = counter + 1 Next i ' Given the array of slide numbers, publish the slides: Set rng = ActivePresentation.Slides.Range(slidesToPublish) rng.PublishSlides libraryUrl, OverWrite End If End Sub
In this task, you run the code. The PublishSlidesDemo procedure contains code that enables you to save all of the slides in a presentation or just a range of slides as separate PPTX files.
The help documentation indicates that the PublishSlideRange method creates a Web presentation in HTML format. However, in truth, the method just creates PPTX files.
To run the code
Place your cursor in the PublishSlidesDemo module and then press F5. Navigate to the location specified in the procedure and observe that a PPTX files was created for each slide.
Comment the line of code to publish all slides and then uncomment the line that publishes a range of slides. Rerun the PublishSlidesDemo procedure and observe that just the selected PPTX files were created.