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

エクセルのマクロで「ThisWorkbook」に 
Private Sub Workbook_BeforePrint(cancel As Boolean)イベントを
記載しています。
エクセルの印刷ボタンやプレビューでは、上記イベントが実行されますが、マクロモジュール内のPrintやPrintPreviewの前には、実行されません。マクロの実行過程をステップインで追ってみると、PrintやPrintPreviewの前にPrivate Sub を読みにいくようなのですが実行はされないようで、非常に困っております。
どなたか詳しい方ご教授お願いいたします。

A 回答 (2件)

こんにちは。



>ActiveWindow.SelectedSheets.PrintPreview

ここのActiveWindow.SelectedSheets は、ひとつのシートだと思いますが、その現象は確認できました。複数のシートですと、解決方法は違いますが、このようにして、解決方法はひとつにまとめてしまえばよいとは思います。

'-------------------------------------------
 ActiveSheet.PageSetup.LeftFooter = "&14&""Arial""NO." & Format(Now(), "0.000")
 ActiveSheet.PrintPreview
'-------------------------------------------

 ActiveSheet.PageSetUpが呼び出されていないようです。PageSetUpは、オブジェクトですが、イベントからでは、PageSetUpオブジェクトを確保せずに抜けてしまうようです。なぜでしょうね。他にも、Workbook イベントには、他のマクロが無視されてしまうというような現象があるようですが、私は、良い説明が出来ません。仕様としか言いようがありません。
 
    • good
    • 0
この回答へのお礼

ご回答ありがとうこざいます。

ご指摘のように各々のマクロモジュールにヘッダー設定の一文を入れて対処しておりました。
Private Subは他のモジュールから参照できないとのことなので、「ThisWorkbook」のPrivate Subは、エクセルを直接操作する場合に動作するのではないか、という結論に達しました。
いろいろと教えていただき参考になりました。ありがとうございました。

お礼日時:2009/10/24 22:30

こんにちは。



試してみましたが、「実行されない」という再現性が得られませんので、コードを出していただいたほうがよいですね。
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のマクロにより印刷プレビューをすると表示されません。(事前に印刷ボタン等でフッターにセットされている場合は、現在に更新されません。)
以上のような状況です。
ご教授よろしくお願いいたします。

補足日時:2009/10/24 13:35
    • good
    • 0

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

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