- ベストアンサー
ExcelVBAで報告書の印刷にスタンプを表示する方法
- Excelで作成した報告書の印刷時にVBAを使い、B1セルに自動的に「提出済み」とスタンプ表示させる方法を教えてください。
- 印刷を中止にした場合にスタンプを表示しないようにするVBAの書き方をお教えいただきたいです。
- VBAは初めて使うので、具体的な書き方を教示していただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ActiveSheet.PrintOut には、実際に印刷したかどうかの戻り値があります。 ただし戻り値を得るには、関数形式で呼び出さなければなりません。 >Sheets.PrintOut メソッド (Excel) | Microsoft Docs >https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets.printout PrintOutの呼び出し後、戻り値を見れば、True ならば印刷した、False ならばキャンセルした、ということがわかります。 ということで、 Dim printed As Variant printed = ActiveSheet.PrintOut(Preview:=True) みたいに呼び出し、その後 If printed Then Range("b1") = "提出済み" End If のようにすれば良いでしょう。 まあ戻り値を変数に入れずとも、 If ActiveSheet.PrintOut(Preview:=True) Then Range("b1") = "提出済み" End If と一気に書いても構いませんが。 処理の流れ上、都合の良い方でどうぞ。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
https://oshiete.goo.ne.jp/qa/3018672.html 印刷をキャンセル に書いてあることが、役立つのでは? そのベストアンサーなどが役に立つのでは。 BeforePrintイベントは印刷に入る前に(1)必要な前処理や(2)該当データがあるのかなどのチェックをユーザーにさせる仕組みで、実行に入った処理の中止や中断をさせる仕組みでhないと思う。 誤解では?だからベストアンサーのようなコードを入れて対処するしかないでしょう。 途中で中断したときの、無駄な印刷はさておき、その他の影響消去は、自己責任で回復処理など作っておかないとならないと、思ったが。
お礼
ご教示ありがとうございました。教えていただいたサイトを見させていただきました。もう少し突き詰めてみます。
お礼
早くにご教示いただきありがとうございました。 頂いたサンプルをもとに If ActiveSheet.PrintOut(Preview:=True) Then Range("b1") = "提出済み" ActiveSheet.Buttons.Delete End If と書き換えてみたら、印刷されない場合は”提出済み”がスタンプされず、またマクロボタンも消されず目的とする仕組みが出来上がりました。これで今後は使えそうです。 本当にありがとうございました。