• ベストアンサー

エクセルVBAのBeforePrintで

ThisWorkbookモジュールで Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub MsgBox "BeforePrintイベント発生" End Sub を使って、Sheet1での印刷のイベントを取得できます。 ただ、指示がPrintなのかPrintPreviewなのかが取得できません。 印刷またはプレビューされる前にどちらの指示なのかを取得する方法がありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

Excelでできるかどうかわかりませんが(すみません) SetWindowsHookEx を使ってメッセージを取得するか SetWindowLongとCallWindowProc でサブクラス化を利用してメッセージを取得するか などでしょうか。

emaxemax
質問者

お礼

ありがとうございます。 むずかしそうですね。 ところが今、エクセル2010をためしたところ、 Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "印刷指示されました" End Sub これがPrintPreviewでは動かないんです。 Printなら反応します。 ひょっとして2010ではBeforePrintPreviewイベントができたのかと思いましたが、そうでもなさそうです。 不思議です。

emaxemax
質問者

補足

http://okwave.jp/qa/q7413770.html に再質問します。 よろしくお願いします。

その他の回答 (1)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

たぶんAPI関数とかじゃないと把握できないような。。。。 ちなみに下記じゃないとPrintイベントキャンセルできないと思います。 --- If ActiveSheet.Name <> "Sheet1" Then Cancel = True

emaxemax
質問者

お礼

Cancel = True が書き漏れてました、すみません。 > たぶんAPI関数とかじゃないと把握できないような。。。。 API関数って、 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) みたいなものですか? これでSleep 100 とかはよく使うのですが、今回の場合はどんな書き方になるのかご教示いただければ幸いです。

関連するQ&A

専門家に質問してみよう