Search code examples
vbapdfpowerpointexport-to-pdf

powerpoint vba export certain slide to pdf


I am trying to export a selected slide to pdf when calling this function.

This code works brilliantly, but gives me the entire slideshow as a PDF.

Sub Export_to_PDF()
    ActivePresentation.ExportAsFixedFormat ActivePresentation.Path & "\" & "ExportedFile" & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint
End Sub

How can I alter the above code so that I can specify a slide number or series of slides to be exported to PDF. I need this code to be able to run from the Slideshow view.

Many thanks.


Solution

  • Ok, so I finally found the answer after months of searching and thought I would share it here plus some additional info based on what I was trying to achieve. Most code is courtesy of random parts found on the net and a bit of my own shonky code.

    Sub Generate_PDF_Cert()
    'This function saves the last slide as a PDF file with a time stamp and the users name who completed the induction.
    
    timestamp = Now()
    
    Dim PR As PrintRange
    Dim lngLast As Long
    Dim savePath As String
    Dim PrintPDF As Integer
    
    
    'Location of saved file
    savePath = Environ("USERPROFILE") & "\Desktop\Induction\Certificates\" & Format(timestamp, "yyyymmdd-hhnn") & "_" & FirstNameX & "_" & LastNameX & ".pdf"
    
    lngLast = ActivePresentation.Slides.Count
    
    With ActivePresentation.PrintOptions
        .Ranges.ClearAll ' always do this
        Set PR = .Ranges.Add(Start:=lngLast, End:=lngLast)
    End With
    
    ActivePresentation.ExportAsFixedFormat _
    Path:=savePath, _
    FixedFormatType:=ppFixedFormatTypePDF, _
    PrintRange:=PR, _
    Intent:=ppFixedFormatIntentScreen, _
    FrameSlides:=msoTrue, _
    RangeType:=ppPrintSlideRange
    
    'Prompt user of file location and option to print.
    PrintPDF = MsgBox("A PDF file of this certificate has been saved to: " & vbCrLf & savePath & vbCrLf & vbCrLf & "Would you like to print a copy also?", vbYesNo, "PDF File Created")
    If PrintPDF = 6 Then Call Print_Active_Slide
    
    
    End Sub
    

    So PDF created nice and easy. It basically takes the last slide of the show and exports only that slide to a PDF. This can be changed to a specific slide or range of slides. Then there is an option to also print that selected slide with the following function:

    Sub Print_Active_Slide()
    ' This code determines what slide is currently visible in the
    ' slide show and then it clears the print range and prints out the
    ' current slide.
    
    
    ' Declare lSldNum as a long integer.
    Dim lSldNum As Long
    
    ' Assign lSldNum to the current slide number.
    lSldNum = SlideShowWindows(1).View.Slide.SlideNumber
    
    ' Set the print options for the active presentation.
    With ActivePresentation.PrintOptions
    
    ' Set RangeType to print a slide range.
     .RangeType = ppPrintSlideRange
    
     ' Delete old print range settings.
     .Ranges.ClearAll
    
     ' Set Ranges to the new range for the current slide.
     .Ranges.Add lSldNum, lSldNum
    End With
    
    ' Using the current print settings print the slide to the default
    ' printer.
    ActivePresentation.PrintOut
    
    MsgBox "The file has been sent to the default printer", vbOKOnly, "Print Job Sent"
    
    End Sub