MENU

【保存時に自動印刷】シート保護と連携する実務的なマクロ例

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:=~
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次