Skip to content

Instantly share code, notes, and snippets.

@YujiFukami
Created March 9, 2024 13:55
Show Gist options
  • Select an option

  • Save YujiFukami/b68c6f6dc6d8f648bb32d23b5f90adcf to your computer and use it in GitHub Desktop.

Select an option

Save YujiFukami/b68c6f6dc6d8f648bb32d23b5f90adcf to your computer and use it in GitHub Desktop.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment