A子さんファイル保存時に自動で印刷したい
シートを保護したままでも印刷させたい
毎回操作する手間を減らしたい!
結論:「Workbook_BeforeSave」イベント+Protect/Unprotectで自動化可能
Excelには保存時のタイミングを捉えるイベントがあります。
これとProtect(保護)やUnprotect(保護解除)を組み合わせれば、
「保存ボタンを押したら、自動的に保護を解除 → 印刷 → 再度保護」
といったフローも、完全自動で実現できます。
目次
実現する機能の概要と活用例
📄 機能概要
- 保存時に自動的に印刷(PDFや紙)
- シートが保護されていても印刷可能
- 印刷前後で保護を自動的に管理
💼 活用例
- 月末報告書や納品書など、印刷が必須の帳票
- 社内共有フォーマットで誤入力を防止したい場合
保存時に自動印刷を行うVBAコード
このコードは「ThisWorkbook」モジュールに記述します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("報告書") ' 対象シート名に変更してください
' 保護を解除(必要に応じてパスワード対応)
ws.Unprotect Password:="abc123"
' 印刷(プリンタ or PDFは印刷設定による)
ws.PrintOut
' 再び保護
ws.Protect Password:="abc123"
End Sub
シート保護されている場合の注意点
シートが保護されていると、印刷設定によってはエラーになる場合があります。
そのため、印刷前に必ず Unprotect で解除しましょう。
🔒 誤操作を防ぐため、印刷後には再び
Protectするのを忘れずに!
パスワード付きの保護と解除を組み込む
保護の強度を高めるため、パスワードを使いましょう。
前述コードでは、"abc123" を仮のパスワードにしています。
ws.Unprotect Password:="abc123" ws.Protect Password:="abc123"



💡パスワードはコードに直接書かれるため、共有時には注意が必要です。
応用:特定のシートだけ印刷する条件分岐
If ws.Name = "納品書" Then
ws.PrintOut
End If



このようにすれば、特定の条件に応じて印刷対象を制御することも可能です。
よくあるトラブルと対策
| トラブル内容 | 対策方法 |
|---|---|
| 印刷されない | プリンタ設定 or PrintOut対象シートが正しいか確認 |
| 印刷後に編集できてしまう | Protectの再設定漏れを確認 |
| イベントが動作しない | ThisWorkbookモジュールか確認 / マクロ有効ブック形式で保存すること(.xlsm) |
まとめ:操作不要で印刷漏れゼロに!
保存と同時に自動で印刷 → 保護も自動で制御
この一連の流れがあるだけで、現場での「うっかりミス」や「印刷漏れ」を大きく減らせます。
| 処理 | VBAコードの主な内容 |
|---|---|
| 保存時イベント | Workbook_BeforeSave |
| シート保護解除 | .Unprotect Password:=~ |
| 自動印刷 | .PrintOut |
| 再保護 | .Protect Password:=~ |

コメント