シート「リスト」にあるシートを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

Follow me!