教えて!ExcelVBA!

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

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

f:id:m_kbou:20200506123816p:plain

VBAでは操作をきっかけとして自動的に実行されるプロシージャの事を「イベントプロシージャ」と言います。自動実行のきっかけとなる操作の事を「イベント」と呼び、「イベント」はブックやワークシート、ユーザーフォーム等のオブジェクトに対して発生します。このイベントを利用して「ブックを印刷する時に発生するイベントプロシージャの作り方」について紹介します。

 

 

構文

イベントプロシージャの記述方法は以下の通りです。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  [実行する処理内容]
End Sub

[説明]:

ブックを印刷する時に実行されるイベントプロシージャです。

[実行する処理内容] イベントが実行された時に処理する内容を記述します。

このイベントプロシージャにはオプションが設定されています。
オプションの内容は以下の通りとなります。

オプション 内容
Cancel イベントの実行/中止を指定できます。
・「True」をセットした場合:イベントを中止します。
・「False」をセットした場合:イベントを実行します。
※初期値は「False」がセットされています。

[記述例]:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  MsgBox "印刷します。"
End Sub

 

作り方

(1)VBE(VBA記述画面)を開きます。
※画面の開き方はこちらの手順を参考にして下さい。

f:id:m_kbou:20200506112801p:plain

(2)ブックオブジェクトをダブルクリックします。

f:id:m_kbou:20200506112815p:plain

(3)オブジェクトボックスの▼ボタンをクリックします。

f:id:m_kbou:20200506112838p:plain

(4)プルダウン一覧の中から「WorkBook」を選択します。

f:id:m_kbou:20200506112853p:plain

(5)この時点で「Workbook_Open」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっている様です。)

f:id:m_kbou:20200506112910p:plain

(6)プロシージャボックスの▼ボタンをクリックします。

f:id:m_kbou:20200506112923p:plain

(7)プルダウン一覧の中から「BeforePrint」を選択します。

f:id:m_kbou:20200506124039p:plain

(8)「Workbook_BeforePrint」イベントプロシージャが表示されます。

f:id:m_kbou:20200506124110p:plain

(9)(8)で作成したイベントプロシージャに実行させる内容を記述します。以下で記述例を2つ紹介します。

(例①)ブックを印刷する際にメッセージを表示する方法

ブックを印刷する際にメッセージを表示する方法を紹介します。

[プログラミング例①]:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

  MsgBox "印刷します。"

End Sub

内容は、「ブックを印刷する際に”印刷します。”をMsgBoxで表示して下さい。」との意味になります。

f:id:m_kbou:20210324180405p:plain

[実行例①]: 

今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例①が記述されています。

(実行前)

①Book1.xlsmブック中の「ファイル」タブをクリックします。

f:id:m_kbou:20210324181242p:plain

②「印刷」をクリックします。

f:id:m_kbou:20210604073743p:plain

③<印刷>ボタンをクリックします。

f:id:m_kbou:20210604073815p:plain

(実行後) 

Book1.xlsmブックが印刷される前に「印刷します。」が表示されます。(※Book1.xlsmブックを印刷する事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210324180516p:plain

[サンプル①]: 

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

(例②)ブックにデータが無い場合は印刷をキャンセルする方法

ブックに印刷するデータが無い場合は印刷をキャンセルする方法を紹介します。

[プログラミング例②]:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

  If ActiveSheet.Range("A1") = "" Then
    MsgBox "印刷するデータがありません。"
    Cancel = True
  End If

End Sub

内容は、「ブックを印刷する際にA1セルにデータが入力されていない場合は、”印刷するデータがありません。”をMsgBoxで表示し、印刷イベントをキャンセルして下さい。」との意味になります。

f:id:m_kbou:20210604073112p:plain

[実行例②]: 

今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例②が記述されています。

(実行前)

①Book1.xlsmブック中のアクティブシートにはデータが何も入力されていません。この状態でBook1.xlsmブック中の「ファイル」タブをクリックします。

f:id:m_kbou:20210604073541p:plain

②「印刷」をクリックします。

f:id:m_kbou:20210604073743p:plain

③<印刷>ボタンをクリックします。

f:id:m_kbou:20210604073815p:plain

(実行後) 

Book1.xlsmブックが印刷される前に「印刷するデータがありません。」が表示され印刷されません。(※Book1.xlsmブックのA1セルにデータが入力されていないため、引数のCancelに「True」がセットされて印刷イベントがキャンセルされました。)

f:id:m_kbou:20210604073833p:plain

[サンプル②]: 

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

ブックを印刷する時に発生するイベントプロシージャの作成方法についての説明は以上です。

   

おわりに

今回はブックを印刷する時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Workbook_Open」イントプロシージャが自動的に作成(上記(5)の内容)されます。不要な場合は削除して下さい。