- ベストアンサー
EXCEL VBA印刷時にメッセージ表示
- EXCEL VBAを使い、ボタンに印刷するマクロを登録しました。ボタンを押すと、指定の帳票が印刷できるようにはできたのですが、追加の機能を盛り込みたいと思っています。
- 印刷する際、内容がいくつかあるので、それぞれテンプレートを作成したのですが、印刷する内容がテンプレートそのままの場合は、メッセージボックスでメッセージを表示し、印刷処理を中止するようにしたいのです。
- テンプレートの内容は数量等が入るので、「○個」などとなっており、数量などを適宜正しい値に変更した上で印刷処理をしたいため、テンプレートのままの場合はNGとしたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>印刷する内容がテンプレートそのままの場合は というのがどういった状態かをパソコンが判断できる基準が必要なのですが 私が良く使う方法ですが 仮にテンプレートのあいているセルに =COUNTBLANK(B2:C18) といったような関数を準備して 空白のセル(未入力のセル)の数を表示させておきます。 もちろん印刷されないように文字の色を白にするとか 印刷の範囲外のセルを使うとかします。 ボタンを押した際に Sub ボタン1_Click() If Range("D5").Value = 0 Then Sheets(2).PrintPreview Else MsgBox "未入力があります" End If End Sub といったようにします。 上記では D5セルにCOUNTBLANK関数で空白のセルの数を表示させておいて それが 0(全ての項目が入力済み)であれば印刷プレビュー 0以外であれば メッセージボックス を表示 といった分岐です。 VBAで条件をたくさん記載する方法もありますが、 シート上で関数を準備することで、後からの変更も簡単にできわかりやすいです。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
マクロ以前に,まずアタマで「何がどうだったらこうしたい」という段取りを組み立てないと,話がまったく先に進みません。 たとえば 1.シート1のA1セルとC1セルには必ず数字が記入されていなければならない 2.シート2のB2:B10セルに数字が「最低でも一個以上」記入されていなければならない 3.以上の条件を全て満たしたときに,はじめてシート1,2,3を連続で印刷して良い(印刷したい) とかなんとか言った具合です。 また,ナントナク「シート1,2,3」とかで例示しましたが,それぞれ具体的なシート名が決まっているのかいないのか,印刷したいのはどのシートなのかといった,「テンプレートの実際の運用」に基づいて正しくマクロを組み立てないと,的外れになってしまうのも判りますよね? 作成例: ブックを開く ALT+F11を押す 現れた画面でプロジェクトエクスプローラから当該のブックのVBAProjectに含まれているThisWorkbookシートをWクリックして開く 現れたシートに下記をコピー貼り付ける pvivate sub Workbook_BeforePrint(cancel as boolean) cancel = true if worksheets(1).range("A1")="" _ or worksheets(1).range("C3")="" _ or application.count(worksheets(2).range("B2:B10")) = 0 then msgbox "記入漏れがあります" else application.enableevents = false worksheets(array(1,2,3)).printout application.enableevents = true end if end sub ファイルメニューから終了してエクセルに戻り,印刷を行う 条件を判定し,OKだった場合は1,2,3枚目のシートが印刷される。 参考にして,あなたが書いた印刷マクロに「印刷して良いのかどうか判断して分岐する」を組み込んで,ごジブンでも作成し直してみてください。
お礼
早速のご回答ありがとうございます。 また、大変拙い質問にも関わらずご回答頂きありがとうございました。 頂いた内容を参考にし、まずは自分で作成し直してみます。 ありがとうございました。
入力を行うセルのすべてについて、テンプレートの値と比較すればできます。
補足
早速のご回答ありがとうございます。 何分初心者なもので、VBAでのテンプレートの値の比較方法、 アラートのメッセージボックスの表示方法が分かりません。 お手数お掛け致しますが、もう少々詳しく教えて頂けますと助かります。
お礼
早速のご対応ありがとうございます。 なるほど。一度エクセルの欄外で関数で計算すれば良いのですね! 早速試してみたいと思います。 ありがとうございました。