印刷前に特定の列を非表示にする
下記の依頼を受けました。
「印刷領域の中に、お客様には見せたくない列が含まれているため、お客様への提出用として印刷する際には自動でこの列を非表示にしたい。」
この記事はこの案件についてのメモです。
やること
セルを非表示にするのは個人的に嫌いなので、セルの「表示・非表示」ではなく、アウトラインの機能を使用しました。印刷時にアウトラインを閉じるプログラムが起動するようにします。
1.非表示にする列にアウトラインを適用する
2.印刷時にアウトラインを折りたたむマクロを作成する
1 アウトラインの適用
- 表示・非表示を切り替えたい列を選択する
2 印刷時にアウトラインを折りたたむマクロを作成する
印刷前に発動するトリガーとして、Workbook
オブジェクトにBeforePrint
というイベントトリガーがあったのでこれを使用します。
1.Alt+F11でVBEを開き、”thisWorkbook”オブジェクトをダブルクリックする
2.下図の部分を左をWorkbook
、右をBeforeprint
を選択する
3.編集領域に印刷前に起動するプログラムを記述する
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'ここにプログラムを記述する。
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
MsgBox ("印刷前にI列のアウトラインをすべて閉じます。")
ActiveSheet.Outline.ShowLevels columnlevels:=1
End Sub
アウトラインの展開はs.Outline.ShowLevels columnlevels:=1
の部分の数字で開閉を指示します。
すべて閉じる場合は1、すべて展開の場合は10です。
行のグループの場合はrowlevels
を使用します。
4.印刷する
作業完了しましたので印刷してみたところ、下図のようにプログラムに仕込んでおいたメッセージボックスが表示されました。成功です。。
印刷前に特定のセルの値をチェックする
別件ですが下記のような依頼も受けました。特定のセルが空白だったら印刷をキャンセルするという要望です。
「印刷前に特定の列に値の入力がされていなかったら(空白だったら)印刷前にアラートを出したい。」
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If sheets1.Range("A3") = "" Then
If MsgBox("A3セルが空っぽです。印刷を続行してもよろしいですか?", vbYesNo) = vbNo Then
'印刷続行中止が選択された場合に、印刷を中止する。
MsgBox ("印刷を中止します。")
Cancel = True
End If
End If
End Sub
印刷をさせない
社外秘のファイルなどで印刷を禁止したいファイルもあるかと思います。下記のように強制的に印刷をキャンセルすれば印刷させないことが可能です。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
MsgBox("このファイルは社外秘です。印刷はできません。")
Cancel = True
End Sub