教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA ブック操作】ブックを印刷する時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

ブックを印刷する時に発生するイベントプロシージャは「Workbook_BeforePrint」を使います。

構文

構文は以下の通りです。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    ' 実行するコードをここに記述する
End Sub

解説

Workbook_BeforePrintイベントプロシージャは、ブックを印刷する時に実行されます。引数は以下の内容となります。

引数 内容
Cancel 印刷をキャンセルするかどうかを設定します。True又はFalseを指定します。Trueに設定すると印刷がキャンセルされます。

使い方

例えば、印刷前にデータの整形を行いたい場合、以下のようにコードを記述します。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    ' データの整形処理を行う
    Sheets("Sheet1").Range("A1:B10").AutoFit
End Sub

上記の例では、印刷前にSheet1のA1からB10までの範囲の列幅を自動調整する処理を行っています。AutoFitメソッドは、選択した範囲の列幅を自動的に調整するためのメソッドです。

また、印刷前にメッセージを表示したい場合は、以下のようにコードを記述します。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    ' メッセージを表示する
    MsgBox "印刷しますか?", vbQuestion + vbYesNo, "印刷確認"
    ' もし「いいえ」が選択された場合は印刷をキャンセルする
    If MsgBoxResult = vbNo Then
        Cancel = True
    End If
End Sub

上記の例では、印刷前にメッセージボックスを表示し、「印刷しますか?」という質問を表示しています。質問に対して「はい」または「いいえ」で回答することができます。もし「いいえ」が選択された場合、Cancel変数をTrueに設定することで印刷をキャンセルします。

プログラミング例

以下に、Workbook_BeforePrintイベントプロシージャの一例を示します。この例では、印刷前にシート内の特定のセルの値が特定の条件を満たしているかをチェックし、満たしていない場合は印刷をキャンセルします。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim rng As Range
    Dim cell As Range
    ' チェックするセル範囲を指定する
    Set rng = Sheets("Sheet1").Range("A1:A10")
    ' 条件をチェックする
    For Each cell In rng
        If cell.Value < 0 Then
            ' 条件を満たさないセルがあった場合は印刷をキャンセルする
            Cancel = True
            MsgBox "条件を満たしていないセルがあります。キャンセルします。", vbCritical, "エラー"
            Exit Sub
        End If
    Next cell
End Sub

上記の例では、Sheet1のA1からA10までの範囲のセルの値が0未満の場合、印刷をキャンセルしてエラーメッセージを表示します。

まとめ

Workbook_BeforePrintイベントプロシージャは、印刷前に特定の処理を自動化するための強力なツールです。データの整形やチェック、メッセージの表示など、印刷に関連する作業をスムーズに行うことができます。