简体   繁体   English

powerpoint vba 将某些幻灯片导出为 pdf

[英]powerpoint vba export certain slide to pdf

I am trying to export a selected slide to pdf when calling this function.调用此函数时,我试图将选定的幻灯片导出为 pdf。

This code works brilliantly, but gives me the entire slideshow as a PDF.这段代码工作得很好,但给了我整个幻灯片的 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.如何更改上述代码,以便可以指定要导出为 PDF 的幻灯片编号或幻灯片系列。 I need this code to be able to run from the Slideshow view.我需要此代码才能从幻灯片视图中运行。

Many thanks.非常感谢。

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.所以 PDF 创建起来又好又容易。 It basically takes the last slide of the show and exports only that slide to a PDF.它基本上需要放映的最后一张幻灯片,然后仅将该幻灯片导出为 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

Thanks, I had the same problem and here is my solution (keeps hyperlinks in pdf):谢谢,我遇到了同样的问题,这是我的解决方案(在 pdf 中保留超链接):

Sub Main()

    'Hide all slides
    For i = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(i).SlideShowTransition.Hidden = msoTrue
    Next i

    'Show your slides (for example: slide 2 + 4)
    ActivePresentation.Slides(2).SlideShowTransition.Hidden = msoFalse
    ActivePresentation.Slides(4).SlideShowTransition.Hidden = msoFalse

    'Save location
    Dim filePath As String
    filePath = "C:\Users\YOUR_NAME\Desktop\fileName.pdf"
    ActivePresentation.SaveAs filePath, ppSaveAsPDF

    'Show all slides again
    For i = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(i).SlideShowTransition.Hidden = msoFalse
    Next i

End Sub

You can also save selected slides to a PDF file using the following method:您还可以使用以下方法将所选幻灯片保存为 PDF 文件:

Sub Test()

    'select slides
    ActivePresentation.Slides.Range(Array(1, 2, 4, 6, 9, 11)).Select
    'save selected slides to a PDF file
    ActivePresentation.ExportAsFixedFormat Path:="C:\Path\xxx.pdf", _
        FixedFormatType:=ppFixedFormatTypePDF, _
        Intent:=ppFixedFormatIntentPrint, _
        OutputType:=ppPrintOutputSlides, _
        RangeType:=ppPrintSelection

End Sub

However, if you are calling this function from an Excel VBA, it might fail to get the selected slides.但是,如果您从 Excel VBA 调用此函数,则可能无法获取所选幻灯片。 So, if you're calling this function from outside of Powerpoint, be sure to activate the slide preview pane first like this:因此,如果您从 Powerpoint 外部调用此函数,请确保首先像这样激活幻灯片预览窗格:

    Set pptApp = ActivePresentation.Parent 'Powerpoint Application
    pptApp.ActiveWindow.Panes(1).Activate 'You can skip this if you're already in Powerpoint

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM