Developer

【ExcelVBA】ブックのイベント②「Workbook_BeforePrint」
2022.08.31
Lv1

【ExcelVBA】ブックのイベント②「Workbook_BeforePrint」

ブックのイベント②「Workbook_BeforePrint」

ブックのイベントを利用したマクロを作成するには、VBEのプロジェクトエクスプローラーで「ThisWorkbook」をダブルクリックします。
今回は「Workbook_BeforePrint」を紹介します。

このイベントは、印刷を行おうとしたときに必ず実行され、プロパティ(正確には引数)を操作することでその印刷しようとした操作を取りやめることができます。
使用例としては、特定の項目が入力されていない場合は印刷できなくするや、ヘッダーやフッターを設定してから印刷するといったことができるようになります。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    '' ここに処理を書く
End Sub

引数のCancelはこの印刷するという処理をキャンセルするかどうかを表すフラグで、デフォルトではFalseとなっています。
プロシージャの中でTrueを設定することで印刷する処理がキャンセルとなり操作を取りやめることが可能となります。

サンプルプログラム

「Workbook_BeforePrint」イベントを使用したサンプルプログラムです。
これは簡単なテスト成績の一覧表で、各生徒の5教科の成績が入力されているExcelです。
左ヘッダーには表名を設定し、右ヘッダーには印刷日を設定します。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    
    With ActiveSheet.PageSetup
        '' 左ヘッダーに表名をセット
        .LeftHeader = Range("B2").Value
        
        '' 右ヘッダーに印刷日をセット
        .RightHeader = "&D"
    End With
    
End Sub

シートはこのようになります。

通常通り印刷を行います。
この時点ではヘッダーには何も設定されていません。

プリンターを「Microsoft Print to PDF」として実際に印刷を行ってみます。
作成されたPDFを確認すると、プレビュー時点ではなかったヘッダーが設定されていることがわかります。

今回は引数の「Cancel」を使って印刷操作を取りやめることは行いませんでしたが、使い方は「Workbook_BeforeClose」と同様です。
前回の記事を参照してください。

まとめ

「Workbook_BeforePrint」はブックのイベントのうちの1つで、印刷を行う前に実行される
引数のCancelにTrueを設定することで印刷操作を取りやめることができる

確認問題

次のプログラムは印刷する前に実行されるイベントプロシージャの一部です。
Ifの条件を満たすときに印刷を行わないような処理とするために、空欄には何を記述すればよいでしょうか。

Private Sub Workbook_BeforePrint(Cancel As Boolean)

    '' 省略

    If Range("B2").Value = "" Then
        MsgBox "値が入力されていません", vbExclamation
        Cancel = 「空欄」
        Exit Sub
    End If

    '' 省略

End Sub
答え
[vb] Private Sub Workbook_BeforePrint(Cancel As Boolean)

” 省略

If Range("B2").Value = "" Then
MsgBox "値が入力されていません", vbExclamation
Cancel = True
Exit Sub
End If

” 省略

End Sub
[/vb]

印刷を停止するには引数Cancelに「True」を代入します。

次回も、引き続き「ブックのイベントについて」です。