• ベストアンサー

エクセル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

  • エクセル2010でのBeforePrintイベント

    これまでエクセル2003を使っていました。 Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "印刷指示されました。" End Sub このコードで、PrintでもPrintPreviewでもイベントが発生しました。 ところが、今エクセル2010でためしたところ、Previewではイベントが発生しません。印刷を指示しないかぎり発生しないようです。 では、新たにBeforePrintPreview?ができたのかと思いましたが見当たりません。 2010でPrintPreviewでイベントを発生させる方法はありますか? あるいは2003で、PrintとPrintPreviewのイベントを別に取得する方法はありますか? 教えてください。

  • エクセルVBAの不思議な挙動?

    エクセル2003です。 ThisWorkbookには以下の記述があります。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub If Range("A1").Value = "" Then MsgBox "A1が未入力です" Range("A1").Select Cancel = True End If Application.OnTime Now(), "ページ移動" End Sub 標準モジュールには以下の記述があります。 Sub ページ移動() Sheets("Sheet2").Select Range("A1").Select End Sub Sub プリント() ActiveWindow.SelectedSheets.PrintPreview End Sub これでSheet1を開いた状態でツールバーから印刷プレビュー指示をすると、A1セルが入力済みであればプレビュー画面を出し、プレビューを閉じればSheet2が表示されます。 ところが、同じ状態でツールバーからではなく、マクロ Sub プリント を実行すると、プレビュー画面にはなりますが、プレビューを閉じてもSheet1のままです。 なぜ、 Application.OnTime Now(), "ページ移動" が、有効にならないのでしょうか?

  • マクロ BeforePrintイベントがマクロ構文上のprintの前に実行できない

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

  • エクセルの特定シート(複数)を印刷不可にするVBA

    教えてください。VBA超初心者です。 エクセルで、特定の複数のシート(指定シート)を印刷不可にする方法はありますでしょうか? いろいろと調べてみたところ、特定シート(一つ)を指定する場合はわかりました。 BBシート印刷不可。 ========================== Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "BB" Then Exit Sub MsgBox "印刷できません" Cancel = True End Sub '========================== できれば、3つあるシートのうち、 AAシートは印刷可能。 BBシートとCCシートは、印刷不可。 としたいのです。 ご伝授いただけると助かります。よろしくお願いします。

  • エクセルVBAでシートモジュールでのパブリック変数

    エクセル2000です。 標準モジュールで取得したパブリック変数は他のシートモジュールで参照できますが、逆にシートモジュールで取得したパブリック変数は他のシートで参照できないのでしょうか? シートチェンジイベントで取得した文字列を変数nmに格納し、ワークブックモジュールで呼び出そうとしたら何もでてきませんでした。 どうやったらよいのでしょうか? 'シートモジュールの記述 Public nm As String Private Sub Worksheet_Change(ByVal Target As Range) Dim rw As Integer If Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then Exit Sub If Selection.Count > 1 Then Exit Sub rw = Target.Row nm = IIf(Cells(rw, "A") = "", Cells(rw, "A").End(xlUp).Value, Cells(rw, "A").Value) 'MsgBox nm End Sub 'ThisWorkbookモジュールの記述 Private Sub Workbook_BeforeClose(Cancel As Boolean) If nm = "" Then Exit Sub MsgBox nm & "さん、ご苦労様でした。" End Sub

  • エクセルのsheet1つだけの印刷制御について

    win xp office2003を使用しています。 全てのsheetの印刷制御は、下記の方法でできるのはわかっているのですが..... ************************************************* Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "このExcelシートは、印刷できません", vbExclamation Cancel = True End Sub ************************************************* 1つのシートだけを印刷できないようにするにはどうしたら良いでしょうか?

  • VBAのWorkbook_BeforeSaveイベントについての疑問

    エクセル2000です。 前にも似たような質問をしたのですが理解ができていません。 ThisWorkbookモジュールに以下の記述をし、終了時保存する場合にはSheet2を表に出すようにしました。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("Sheet1").Range("A65536").End(xlUp).Offset(1).Value = Time() Sheets("Sheet2").Select MsgBox "保存します。" & ActiveSheet.Name Sheets("Sheet1").Range("B65536").End(xlUp).Offset(1).Value = Time() End Sub これで×を押して手動で終了すればそのとおりに働きます。ActiveSheet.Nameも当然Sheet2になります。 ところが、標準モジュールの下記の終了マクロ Sub 終了() ThisWorkbook.Close End Sub で終了しようとすると、A列セルにTime()は記録され、どういうわけかSheet2がSelectされず、MsgBox "保存します。" のメッセージが出て、B列セルにTime()が記録され、保存されます。 ActiveSheet.NameもSheet2ではありません。 つまり、Sheets("Sheet2").Select の部分だけが完全にスキップされてしまうのです。 どうしてでしょうか?

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • Excelのシートを印刷不可(禁止)にするにはどうしたら?

    同様の質問があると思うのですが、どうもうまくいきません。 Windows2000 Excel2000 で下記をコピーして入れてみたのですが、 印刷禁止にならないのです。 もしかすると、マクロを使えていないのかも知れません。 誰か、“猿”でもわかるぐらい、Excelシートの印刷禁止の方法を 優しく解説して頂けないでしょうか? 宜しくお願い致します。 (特にマクロをどう使ったらいいのかわかっていないです) Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "このExcelシートは、印刷できません", vbExclamation Cancel = True End Sub

  • Web上のエクセルのVBA操作について

    OSはWin2000、エクセルも2000です。 社内のイントラネット上にエクセルのBOOKを置いてあります。 ダウンロードせずにダブルクリックでイントラ上で開いたこのBOOKに対するVBA操作で、以下の3つを試しましたが、すべてエラーになり、プレビューすることができません。 どう直せばよいのでしょうか? Sub test() ActiveSheet.PrintPreview End Sub Sub test2() ThisWorkbook.ActiveSheet.PrintPreview End Sub Sub test3() x = ThisWorkbook.ActiveSheet.Name ThisWorkbook.Sheets(x).PrintPreview End Sub また Sub 終了() ActiveWorkbook.Close (False) End Sub もまったく働きません。 どうやったら終了できますか?

専門家に質問してみよう