プロが教えるわが家の防犯対策術!

初めまして、こんにちは。
EXCEL VBA初心者で少々困っております。

EXCEL VBAを使い、ボタンに印刷するマクロを登録しました。
ボタンを押すと、指定の帳票が印刷できるようにはできたのですが、
追加の機能を盛り込みたいと思っています。

印刷する際、内容がいくつかあるので、それぞれテンプレートを作成したのですが、
印刷する内容がテンプレートそのままの場合は、メッセージボックスでメッセージを表示し、
印刷処理を中止するようにしたいのです。

テンプレートの内容は数量等が入るので、「○個」などとなっており、
数量などを適宜正しい値に変更した上で印刷処理をしたいため、
テンプレートのままの場合はNGとしたいです。

拙い説明で申し訳ございませんが、ご教示頂けますと助かります。
よろしくお願い致します。

A 回答 (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で条件をたくさん記載する方法もありますが、
シート上で関数を準備することで、後からの変更も簡単にできわかりやすいです。
    • good
    • 0
この回答へのお礼

早速のご対応ありがとうございます。
なるほど。一度エクセルの欄外で関数で計算すれば良いのですね!
早速試してみたいと思います。
ありがとうございました。

お礼日時:2011/10/16 19:46

マクロ以前に,まずアタマで「何がどうだったらこうしたい」という段取りを組み立てないと,話がまったく先に進みません。



たとえば
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枚目のシートが印刷される。


参考にして,あなたが書いた印刷マクロに「印刷して良いのかどうか判断して分岐する」を組み込んで,ごジブンでも作成し直してみてください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
また、大変拙い質問にも関わらずご回答頂きありがとうございました。
頂いた内容を参考にし、まずは自分で作成し直してみます。
ありがとうございました。

お礼日時:2011/10/16 19:45

入力を行うセルのすべてについて、テンプレートの値と比較すればできます。

この回答への補足

早速のご回答ありがとうございます。

何分初心者なもので、VBAでのテンプレートの値の比較方法、
アラートのメッセージボックスの表示方法が分かりません。
お手数お掛け致しますが、もう少々詳しく教えて頂けますと助かります。

補足日時:2011/10/16 16:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています