- ベストアンサー
エクセル2010でのBeforePrintイベント
- エクセル2010でのBeforePrintイベントの方法について教えてください。
- PrintPreviewでイベントを発生させる方法はあるのか教えてください。
- エクセル2003でPrintとPrintPreviewのイベントを別に取得する方法はあるのか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>これで何か問題が起きるおそれはないでしょうか? Sheet1以外にシートが無ければ良いですが、 印刷対象が複数であればそれなりに対応しないといけないでしょう。 また、印刷用のボタンでは、プリンタを切り替えたい場合も考慮しておく必要があります。 Sheet1.PrintOut ではなくて Application.Dialogs(xlDialogPrint).Show を使うとか。 ただ、今回の目的には対応できないですね。 >社内のユーザーがプレビューされた段階で入力が完了したと勘違いする危惧がある 2010の場合のプレビューは[ファイル]タブの[印刷]の事ですよね。 BeforePrintが走らない状況には変わりありません。 さて、どうしましょうか。 >或る入力用のシートを作っていて、ユーザーが印刷指示しても、 >入力に矛盾あるいは不足の場合、印字できないようなマクロを組んでおりました。 入力値をチェックしてユーザーに注意喚起する、 またはその後の操作に制限をかけたいというニーズがある事は理解できます。 『印字できない』ようにするのが最終目的ならBeforePrintの制御で良いですね。 別にユーザーが入力未完了と勘違いしたとしても、『印字できない』事は達成できてます。 (だったら現状のままで良い事になります) 2000-2010の各バージョンによって操作感に違いが出るのは事実なので 2010ユーザーにそれを認識してもらうしかないですね。 それは許容できないという事であれば、 『印字できない』のが最終目的ではない、という事になりませんか? 入力作業を終える時に、『入力に矛盾あるいは不足を許したくない』という事では? もし、こちらが目的だったら、それに見合ったイベントでのチェックや仕掛けを考えたほうが良い気がします。 「入力規則」やWorksheet_Changeイベントなど。
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
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[印刷]は自前のコマンドからでないと実行できないようにする、 というのが現実的な対応かと思われます。 #それでも状況によってはかなり使いづらくなります。
お礼
> どういった目的で[プレビュー]と[印刷]を識別したいのでしょう? > その目的にもよりますが、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 として対応しようと思います。 これで何か問題が起きるおそれはないでしょうか?
お礼
> Sheet1以外にシートが無ければ良いですが、 > 印刷対象が複数であればそれなりに対応しないといけないでしょう。 すみません。質問では主題ではないので省略しましたが Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> Sheet1.Name Then Exit Sub と手当てしております。 > 2010の場合のプレビューは[ファイル]タブの[印刷]の事ですよね。 > BeforePrintが走らない状況には変わりありません。 仰せのとおりでした。 > 入力作業を終える時に、『入力に矛盾あるいは不足を許したくない』という事では? これもその通りですね。 もう一度考え直して見ます。 ありがとうございました。