- ベストアンサー
マクロ BeforePrintイベントがマクロ構文上のprintの前に実行できない
エクセルのマクロで「ThisWorkbook」に Private Sub Workbook_BeforePrint(cancel As Boolean)イベントを 記載しています。 エクセルの印刷ボタンやプレビューでは、上記イベントが実行されますが、マクロモジュール内のPrintやPrintPreviewの前には、実行されません。マクロの実行過程をステップインで追ってみると、PrintやPrintPreviewの前にPrivate Sub を読みにいくようなのですが実行はされないようで、非常に困っております。 どなたか詳しい方ご教授お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >ActiveWindow.SelectedSheets.PrintPreview ここのActiveWindow.SelectedSheets は、ひとつのシートだと思いますが、その現象は確認できました。複数のシートですと、解決方法は違いますが、このようにして、解決方法はひとつにまとめてしまえばよいとは思います。 '------------------------------------------- ActiveSheet.PageSetup.LeftFooter = "&14&""Arial""NO." & Format(Now(), "0.000") ActiveSheet.PrintPreview '------------------------------------------- ActiveSheet.PageSetUpが呼び出されていないようです。PageSetUpは、オブジェクトですが、イベントからでは、PageSetUpオブジェクトを確保せずに抜けてしまうようです。なぜでしょうね。他にも、Workbook イベントには、他のマクロが無視されてしまうというような現象があるようですが、私は、良い説明が出来ません。仕様としか言いようがありません。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 試してみましたが、「実行されない」という再現性が得られませんので、コードを出していただいたほうがよいですね。 Private Sub Workbook_BeforePrint(Cancel As Boolean) というものは、ActiveSheet を対象としていますから、その食い違いがあるのではないかと思います。
補足
Wendy02様 早速のご回答ありがとうござます。 コードは以下のとおりです。 「ThisWorkbook」 Private Sub Workbook_BeforePrint(cancel As Boolean) ActiveSheet.PageSetup.LeftFooter = "&14&""Arial""NO." & Format(Now(), "0.000") End Sub 「Module1」 Sub Macro1() ActiveWindow.SelectedSheets.PrintPreview End Sub Private Subは、現在の日付を小数点3位までのシリアル値にして印刷前に左フッターにセットするものです。(表示例.「No.40110.571」) エクセルツールバーの印刷ボタン、プレビューボタン、メニューから操作すると現在のシリアル値が表示されますが、 Module1のマクロにより印刷プレビューをすると表示されません。(事前に印刷ボタン等でフッターにセットされている場合は、現在に更新されません。) 以上のような状況です。 ご教授よろしくお願いいたします。
お礼
ご回答ありがとうこざいます。 ご指摘のように各々のマクロモジュールにヘッダー設定の一文を入れて対処しておりました。 Private Subは他のモジュールから参照できないとのことなので、「ThisWorkbook」のPrivate Subは、エクセルを直接操作する場合に動作するのではないか、という結論に達しました。 いろいろと教えていただき参考になりました。ありがとうございました。