複数シートをまとめてPDFで出力する
- yuji fukami
- 2024年1月17日
- 読了時間: 3分
更新日:2024年3月9日
<概要>
今回は、複数シートをまとめてPDFで出力する汎用プロシージャを紹介します。
シート単体のPDF出力の汎用プロシージャはすでに紹介しましたが、今回は複数シートをまとめてPDFとして出力する汎用プロシージャの紹介です。
複数シートのPDF出力を手動で行うためには、
・対象シートのみを表示してブック全体をPDF化で印刷
・対象シートだけを選択した状態で選択範囲をPDF化で印刷
の2通りありますが、これらも手動で行うのは非効率です。
<用途>
複数シートをまとめてPDF化する
<プロシージャ紹介>
Public Sub OutputPDFs(SheetNameList, FolderPath As String, FileName As String, [Book As Workbook], [Message As Boolean = True])
名前: OutputPDFs /Subプロシージャ
説明: 複数シートをまとめてPDF出力する
'引数
SheetNameList・・・PDF化するシートのシート名が入った一次元配列
FolderPath ・・・出力先フォルダ
FileName ・・・出力PDFのファイル名
[Message] ・・・出力確認のメッセージを表示するかどうか
[Book] ・・・対象のワークブック(省略ならActiveWorkbook)
<実行例>
次のようなコードを用意します。
ブックにはSheet2,Sheet3,Sheet4の3つのワークシートオブジェクトが存在し、それらをまとめてPDF化する処理です。詳細はサンプルファイルを参照してください。
Public Sub TestOutputPDFs()
'PDF化対象のシートのシート名を一次元配列に格納
Dim SheetNameList As Variant: ReDim SheetNameList(1 To 3)
SheetNameList(1) = Sheet2.Name
SheetNameList(2) = Sheet3.Name
SheetNameList(3) = Sheet4.Name
'出力先フォルダとファイル名を指定
Dim FolderPath As String: FolderPath = "C:\Test"
Dim FileName As String: FileName = "PDF複数ページ出力テスト"
'複数ページでPDF化
Call OutputPDFs(SheetNameList, FolderPath, FileName, ThisWorkbook, True)
End Sub
PDF化の対象とするシートはそれぞれのシート名を一次元配列に格納して引数「SheetNameList」に渡します。
あとは、出力先のフォルダは引数FolderPath、PDFのファイル名は引数FileNameで渡し、あとは対象とするブックや、出力後に確認メッセージを表示するかも設定できます。
<サンプルファイル>
<コード>
Public Sub OutputPDFs(ByRef SheetNameList As Variant, _
ByRef FolderPath As String, _
ByRef FileName As String, _
Optional ByRef Book As Workbook, _
Optional ByRef Message As Boolean = True)
'複数シートをまとめてPDF出力する
'20231116
'参考
'https://www.softex-celware.com/post/outputpdfs
'引数
'SheetNameList・・・PDF化するシートのシート名が入った一次元配列
'FolderPath ・・・出力先フォルダ
'FileName ・・・出力PDFのファイル名
'[Message] ・・・出力確認のメッセージを表示するかどうか
'[Book] ・・・対象のワークブック(省略ならActiveWorkbook)
'引数チェック
If Book Is Nothing Then
'ワークブックが指定されていない場合はActiveWorkbook
Set Book = ActiveWorkbook
End If
'出力するPDFのファイル名を作成する
Dim PDFPath As String
PDFPath = FolderPath & "\" & FileName & ".pdf"
'最初に選択していたシートを保管しておく
Dim SelectSheet As Worksheet: Set SelectSheet = ActiveSheet
'PDF化対象シートを選択
Book.Worksheets(SheetNameList).Select
'PDFで出力する
Dim Sheet As Worksheet: Set Sheet = ActiveSheet
On Error GoTo ErrorEscape1
Sheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=PDFPath
GoTo ErrorEscape2
ErrorEscape1:
'同じPDFが起動中の場合はエラーになる
MsgBox "PDF出力に失敗しました" & vbLf & _
"同じ名前のPDFが起動中の可能性があります", _
vbExclamation
ErrorEscape2:
'PDFの出力先のフォルダを起動するか確認
Dim MessageStr As String
If Message = True Then
MessageStr = "「" & FileName & ".pdf" & "」" & vbLf & _
"を作成しました" & vbLf & _
"出力先フォルダを起動しますか?"
If MsgBox(MessageStr, vbYesNo + vbInformation) = vbYes Then
Shell "C:\Windows\explorer.exe " & _
FolderPath, vbNormalFocus
End If
End If
'最初に選択していたシートを表示する(元に戻す)
SelectSheet.Select
End Sub
Comments