powerpoint vba 将某些幻灯片导出为 pdf
powerpoint vba export certain slide to pdf
调用此函数时,我正在尝试将选定的幻灯片导出为 pdf。
此代码运行良好,但以 PDF 格式提供了整个幻灯片。
Sub Export_to_PDF()
ActivePresentation.ExportAsFixedFormat ActivePresentation.Path & "\" & "ExportedFile" & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint
End Sub
如何更改以上代码,以便我可以指定要导出为 PDF 的幻灯片编号或一系列幻灯片。我需要此代码才能从幻灯片视图 运行。
非常感谢。
好的,经过几个月的搜索,我终于找到了答案,我想我会在这里分享它以及一些基于我想要实现的目标的额外信息。大多数代码来自网络上的随机部分和我自己的一些糟糕代码。
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
因此,创建 PDF 非常简单。它基本上采用了放映的最后一张幻灯片,并且仅将该幻灯片导出为 PDF。这可以更改为特定幻灯片或幻灯片范围。然后还有一个选项可以使用以下功能打印所选幻灯片:
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
谢谢,我遇到了同样的问题,这是我的解决方案(在 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
您还可以使用以下方法将所选幻灯片保存为 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
但是,如果您从 Excel VBA 调用此函数,它可能无法获取选定的幻灯片。因此,如果您从 Powerpoint 外部调用此函数,请务必先激活幻灯片预览窗格,如下所示:
Set pptApp = ActivePresentation.Parent 'Powerpoint Application
pptApp.ActiveWindow.Panes(1).Activate 'You can skip this if you're already in Powerpoint
调用此函数时,我正在尝试将选定的幻灯片导出为 pdf。
此代码运行良好,但以 PDF 格式提供了整个幻灯片。
Sub Export_to_PDF()
ActivePresentation.ExportAsFixedFormat ActivePresentation.Path & "\" & "ExportedFile" & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint
End Sub
如何更改以上代码,以便我可以指定要导出为 PDF 的幻灯片编号或一系列幻灯片。我需要此代码才能从幻灯片视图 运行。
非常感谢。
好的,经过几个月的搜索,我终于找到了答案,我想我会在这里分享它以及一些基于我想要实现的目标的额外信息。大多数代码来自网络上的随机部分和我自己的一些糟糕代码。
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
因此,创建 PDF 非常简单。它基本上采用了放映的最后一张幻灯片,并且仅将该幻灯片导出为 PDF。这可以更改为特定幻灯片或幻灯片范围。然后还有一个选项可以使用以下功能打印所选幻灯片:
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
谢谢,我遇到了同样的问题,这是我的解决方案(在 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
您还可以使用以下方法将所选幻灯片保存为 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
但是,如果您从 Excel VBA 调用此函数,它可能无法获取选定的幻灯片。因此,如果您从 Powerpoint 外部调用此函数,请务必先激活幻灯片预览窗格,如下所示:
Set pptApp = ActivePresentation.Parent 'Powerpoint Application
pptApp.ActiveWindow.Panes(1).Activate 'You can skip this if you're already in Powerpoint