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

このQ&Aのポイント
  • エクセル2010でのBeforePrintイベントの方法について教えてください。
  • PrintPreviewでイベントを発生させる方法はあるのか教えてください。
  • エクセル2003でPrintとPrintPreviewのイベントを別に取得する方法はあるのか教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

>これで何か問題が起きるおそれはないでしょうか? Sheet1以外にシートが無ければ良いですが、 印刷対象が複数であればそれなりに対応しないといけないでしょう。 また、印刷用のボタンでは、プリンタを切り替えたい場合も考慮しておく必要があります。 Sheet1.PrintOut ではなくて Application.Dialogs(xlDialogPrint).Show を使うとか。 ただ、今回の目的には対応できないですね。 >社内のユーザーがプレビューされた段階で入力が完了したと勘違いする危惧がある 2010の場合のプレビューは[ファイル]タブの[印刷]の事ですよね。 BeforePrintが走らない状況には変わりありません。 さて、どうしましょうか。 >或る入力用のシートを作っていて、ユーザーが印刷指示しても、 >入力に矛盾あるいは不足の場合、印字できないようなマクロを組んでおりました。 入力値をチェックしてユーザーに注意喚起する、 またはその後の操作に制限をかけたいというニーズがある事は理解できます。 『印字できない』ようにするのが最終目的ならBeforePrintの制御で良いですね。 別にユーザーが入力未完了と勘違いしたとしても、『印字できない』事は達成できてます。 (だったら現状のままで良い事になります) 2000-2010の各バージョンによって操作感に違いが出るのは事実なので 2010ユーザーにそれを認識してもらうしかないですね。 それは許容できないという事であれば、 『印字できない』のが最終目的ではない、という事になりませんか? 入力作業を終える時に、『入力に矛盾あるいは不足を許したくない』という事では? もし、こちらが目的だったら、それに見合ったイベントでのチェックや仕掛けを考えたほうが良い気がします。 「入力規則」やWorksheet_Changeイベントなど。

emaxemax
質問者

お礼

> Sheet1以外にシートが無ければ良いですが、 > 印刷対象が複数であればそれなりに対応しないといけないでしょう。 すみません。質問では主題ではないので省略しましたが Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> Sheet1.Name Then Exit Sub と手当てしております。 > 2010の場合のプレビューは[ファイル]タブの[印刷]の事ですよね。 > BeforePrintが走らない状況には変わりありません。 仰せのとおりでした。 > 入力作業を終える時に、『入力に矛盾あるいは不足を許したくない』という事では? これもその通りですね。 もう一度考え直して見ます。 ありがとうございました。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Excel2010で従来バージョンの(全画面)印刷プレビューを行うには、 クイックアクセスツールバーでカスタマイズする必要があります。 http://www.becoolusers.com/office/2010print-preview-quick-access.html この印刷プレビューではBeforePrintイベントが発生します。 >2010でPrintPreviewでイベントを発生させる方法はありますか? PrintPreviewのみのイベントはありません。 >あるいは2003で、PrintとPrintPreviewのイベントを別に取得する方法はありますか? これはかなり難しいです。 以前、CommandBarControlによって識別できるのでは、と考えた事がありますが ID:= 4 のCommandBarControl、つまり[ファイル]-[印刷]からの[印刷プレビュー]が識別できません。 APIを使ってできるのかもしれませんが茨の道です。 どういった目的で[プレビュー]と[印刷]を識別したいのでしょう? その目的にもよりますが、BeforePrintで印刷を制限してしまって、 [プレビュー]or[印刷]は自前のコマンドからでないと実行できないようにする、 というのが現実的な対応かと思われます。 #それでも状況によってはかなり使いづらくなります。

emaxemax
質問者

お礼

> どういった目的で[プレビュー]と[印刷]を識別したいのでしょう? > その目的にもよりますが、BeforePrintで印刷を制限してしまって、 社内には2000、2003、2010が混在してます。 どれも同じ挙動をしてくれるならわざわざ識別する必要はないんです。 或る入力用のシートを作っていて、ユーザーが印刷指示しても、入力に矛盾あるいは不足の場合、印字できないようなマクロを組んでおりました。 ところが、問題がある場合、2003までならプレビュー画面も表示されないのに、2010ではプレビューが表示されてしまいます。 これでは、社内のユーザーがプレビューされた段階で入力が完了したと勘違いする危惧があるための質問でした。 でもかなりやっかいなようですので、今回は以下のように、エクセル本来の印刷指示は無効にして、 Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True MsgBox "シート上の印刷ボタンを押してください。" End Sub Private Sub CommandButton1_Click() ' エラーチェックのコード (略) Application.EnableEvents = False Sheet1.PrintPreview Application.EnableEvents = True End Sub として対応しようと思います。 これで何か問題が起きるおそれはないでしょうか?

関連するQ&A

  • エクセルVBAのBeforePrintで

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

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

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

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

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

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

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

  • Excel 特定のシートを印刷不可にする方法

    教えてください。 Excelで、特定のシートを印刷不可にする方法はありますでしょうか? Book全体で印刷不可にする方法は、以下 '========================== Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True '※1 タイトル = "ペーパーレス運動実施中!" スタイル = 48 'vbexclamation メッセージ = "印刷しないでください" 応答 = MsgBox(メッセージ, スタイル, タイトル) End Sub '========================== で可能なことは認識しています。 よろしくお願いします。

  • EXCEL VBA BeforePrintイベント時のプレビューについて

    お世話になります。 早速ですが、以下のコードでBeforePrintのイベントを利用していますが、 プリントボタンやCtrl+Pでは正常に動作するのですがプレビューボタンを押されたら Cancel=Trueが効かず、プレビューが表示され、ユーザーフォームも開くので Excelを制御出来なくなってしまいます。(タスクマネージャで落とすしかない) プレビューでもCancel=Trueにする方法、またはプレビュー自体を禁止する方法 がありましたらご教授ください。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If Worksheets("設定").Range("B31").Value = True Then  Cancel = True  F_Print.Show 'F_Printはユーザフォーム End If End Sub 環境:Excel2000 SP3

  • エクセル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(), "ページ移動" が、有効にならないのでしょうか?

  • エクセルの特定シート(複数)を印刷不可にする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設定 パスワード入力しても印刷不可

    エクセルVBAでパスワードを入力しないと印刷できない設定にしました。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Password = "1111" x = InputBox("印刷注意 パスワード") If x = Password Then Else Cancel = True End If End Sub パスワード【1111】を入力しても印刷できないのですが、なぜでしょう?

  • Excel 印刷禁止 マクロの作り方

    毎年の期末で担当者が変わるため、 3/31で印刷を禁止するマクロを作りましたが、 これを応用して初めての使用後、30日で印刷が出来なくなるように しようと思いましたが、なかなか出来ません。どなたか力を貸してください。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim D As Integer D = (Now+30) - Now If D <= 0 Then Cancel = True MsgBox "30日経過しましたので、担当者へ連絡してして下さい。印刷できません", 48, " Else Cancel = False Exit Sub End If End Sub 以上 よろしくお願いします。

専門家に質問してみよう