top of page

複数シートをまとめてPDFで出力する

更新日: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


softex-celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page