シート「リスト」にあるシートを1つのPDFファイルで出力したい
タイトルのマクロです。
'*********************************
'* シート「リスト」にあるシートを1つのPDFファイルで出力
'* シート「リスト」A1:タイトル、A2以降:シート名
'* pdfFileName:出力するPDFファイルのフルパス
Private Sub ExportSheetsToPDF(ByVal pdfFileName As String)
Dim listSheet As Worksheet
Dim sheetName As String
Dim savePath As String
Dim cell As Range
' シート「リスト」の取得
Set listSheet = ThisWorkbook.Sheets("リスト")
' PDF保存先のパスを指定
savePath = pdfFileName
' シート「リスト」のA列からシート名を取得し、該当するシートをPDFにエクスポート
Dim first As Boolean: first = False
For Each cell In listSheet.Range("A2:A" & listSheet.Cells(listSheet.Rows.Count, "A").End(xlUp).Row)
sheetName = cell.Value
If SheetExists(sheetName) Then
If first Then
Sheets(sheetName).Select Replace:=False
Else
Sheets(sheetName).Select
first = True
End If
End If
Next cell
' PDFとして保存
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=savePath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
' シート「リスト」を選択状態に戻す
listSheet.Select
End Sub
' シート有無判断
Private Function SheetExists(sheetName As String) As Boolean
On Error Resume Next
SheetExists = Not Sheets(sheetName) Is Nothing
On Error GoTo 0
End Function
使用例は以下。このマクロを実行すると、シート「リスト」のA2以下のシート名のシートを、一つのPDFファイルに出力します。
Private Sub 使用例()
Call ExportSheetsToPDF(ThisWorkbook.Path & "\Output.pdf")
End Sub