VBAマクロで開いているWorkbookの複数シートを印刷したい場合があります。
全てのシートであれば、複数シートの印刷やブック全体の印刷で対応できますが、
任意の指定シートのみを印刷する場合は、少し変化が必要です。
指定したシート以外のWorkSheetをすべて印刷したい
Public Sub sample()
'①■全てのシートを対象に処理する(ActiveWorkbook)
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
'■1枚づつ印刷処理を行う(非表示シートがある場合はエラー発生するため、表示しているシートのみ対象とする)
If ws.Visible = xlSheetVisible Then
Select Case ws.Name
Case "設定", "月集計" 'シートの名称が「設定」や「月集計」は何もしない
Case Else
ws.PrintOut
End Select
End If
Next
'②■全てのシートを対象に処理する(ActiveWorkbook)
Dim i As Long
Dim arr As Variant
For i = 1 To Worksheets.Count
'■表示されているシートを配列に格納
If Worksheets(i).Visible = xlSheetVisible Then
Select Case ws.Name
Case "設定", "月集計" 'シートの名称が「設定」や「月集計」は何もしない
Case Else
If IsEmpty(arr) Then
ReDim arr(0)
Else
ReDim Preserve arr(UBound(arr) + 1)
End If
arr(UBound(arr)) = Worksheets(i).Name
End Select
End If
Next i
'■配列にまとめたものを一気に印刷する
Sheets(arr).PrintOut
End Sub
注意点
- ①で都度印刷処理を行う場合、シートのたびに印刷処理がかかります
(途中で他の人が印刷すると間に入ってしまいます) - ②配列に格納しての場合、シートを1回の印刷処理で印刷します。
- 非表示シートがあった場合はエラーが出るため、表示非表示のチェックを行います。
関連記事
- 印刷を行う【PrintOut メソッド】
- 印刷前に処理実行する/印刷させない【Workbook_BeforePrint】
- 上下左右の印刷余白をなしにする処理をパーツ化する
- Edge/Chromeで印刷設定を行う【Selenium】
- Edge/ChromeでWebページを印刷する【shadowRoot】【Selenium】
コメント