top of page

シートをPDFで出力する


<概要>


 今回は、特定のシートの印刷範囲をPDFで出力する汎用プロシージャを紹介します。

 

 PDF出力は取引先へのメール添付や、データの保管用として頻繁に行う作業です。手動で行うには印刷プレビューで「Microsoft Print to PDF」を設定して印刷で可能ですが、保存先フォルダやファイル名を毎回指定するのは手間です。

 

 紹介する汎用プロシージャでは保存先フォルダ、ファイル名を引数で指定できます。なので、「ファイル名が顧客ごとに変わる」「保存先のフォルダが日付ごとに異なる」などの場合でも簡単に自動化が出来ます。


<用途>


  • PDF出力の自動化



<プロシージャ紹介>


Public Sub OutputPDF(Sheet As Worksheet, FolderPath As String, FileName As String, [Message As Boolean = True])


名前: OutputPDF /Subプロシージャ

説明: 指定シートをPDFで出力する



引数

Sheet ・・・PDF化する対象のシート

FolderPath・・・出力先フォルダパス

FileName ・・・出力PDFのファイル名

[Message] ・・・出力確認のメッセージを表示するかどうか

省略なら表示する


<実行例>


 次のようなワークシートを用意します。ワークシートのオブジェクト名は「Sheet2」です。



 コードは次のようなものを用意します。

Public Sub TestOutputPDF()
    Dim FolderPath As String: FolderPath = "C:\Test"
    Dim FileName   As String: FileName = "PDF出力テスト"
    Call OutputPDF(Sheet2, FolderPath, FileName, True)
End Sub

 

 出力先のフォルダパスとPDFのファイル名を引数で指定しています。

 実行すると次のようなメッセージが現れて、「はい」を押すと、PDFの出力先のフォルダが起動して出力結果をすぐ確認もできるようになっています。



 


<サンプルファイル>





<コード>

 

 Gist

Public Sub OutputPDF(ByRef Sheet As Worksheet, _
                ByRef FolderPath As String, _
                  ByRef FileName As String, _
          Optional ByRef Message As Boolean = True)
'指定シートをPDFで出力する
'20210721
'20231102 出力失敗の対策追加

'参考
'https://www.softex-celware.com/post/outputpdf

'引数
'Sheet     ・・・PDF化する対象のシート
'FolderPath・・・出力先フォルダパス
'FileName  ・・・出力PDFのファイル名
'[Message] ・・・出力確認のメッセージを表示するかどうか
'                省略なら表示する
   
    '処理
    '出力するPDFのファイル名を作成する
    Dim PDFPath As String
    PDFPath = FolderPath & "\" & FileName & ".pdf"
   
    'PDFで出力する
    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
    
End Sub

閲覧数:63回0件のコメント

最新記事

すべて表示

Comments


bottom of page