スポンサーリンク

未入力データがあるかどうか確認して印刷する

印刷beforeprintExcel-VBA

エクセルファイルを印刷した時に、必要なデータが未入力のまま印刷してしまった事ありませんか?

ここでは、請求書の宛名が入力されていない場合にメッセージを表示して印刷を中止し、宛名が入力されている時は印刷を実行するようにします。

印刷直前に未入力データを見つけてお知らせしてくれるVBAコードです。

スポンサーリンク

印刷する直前にVBA処理をすると解決

この方法はいくつかVBAコードがありますが、普段使用しているVBAコード2つをご紹介します。

波乗りアヒル
波乗りアヒル

一つ目は、If~Elseを使う方法、二つ目はBeforePrintです。

どちらの方法でも、指定した部分(セル)が未入力だった時に、メッセージを表示して印刷を中止するようになります。

宛名入力の部分は「セルA2」とします。

If~Elseを使う方法

この方法は、ユーザーフォームに配置したコマンドボタンにセルA2が空欄の時に印刷を中止するVBAコードを記述しています。

エクセルファイル全体ではなく、個別に設定するにはこの方法をおススメし、私自身もこの方法を主に使っています。

VBAコード

Private Sub CommandButton1_Click()
If Range(“A2”).Value = “” Then
MsgBox “宛名が入力されていません”
Else
ActiveWindow.SelectedSheets.PrintOut FROM:=1, To:=1, COPIES:=1, COLLATE _
:=True
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. もしセルA2が空欄だったら
  3. 「宛名が入力されていません」とメッセージを表示する
  4. そうでなかったら(空欄ではない場合)
  5. 表示しているシートを1ページ目~1ページ目までを1部印刷する
  6. Ifステートメント終了
  7. マクロ記録終了

ここではセルA2の値を参照しましたが、ユーザーフォームに配置したテキストボックスの値を参照することもできます。

BeforePrintを使う方法

この方法は、エクセルファイル自体に書き込む方法で、 セルA2が空欄の時に印刷を中止するVBAコードを記述しています。

波乗りアヒル
波乗りアヒル

このVBAコードを書き込む場所はThisWorkBookですよ!

VBAコード

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Range(“A2”).Value = “” Then
MsgBox “宛名が入力されていません”
Cancel = True
End If
End Sub

ただこの方法、先ほどもお話ししたように私自身もう使っていません。

BeforePrint を使っていない理由は、このVBAコードだけでは見ての通り、印刷するVBAコードPrintメソッドは書いていませんので、当然ながら印刷をすることはできません。

別途印刷を指示するVBAコードを記述する必要があります。また、A2以外の場所を更に指定したい時には対応できません。

Excel-VBAもくじへ

コメント