MS Access Tips/Sample and VBA and Blog customize etc...

レポートで印刷かプレビューか判断する

レポートのイベントで現在、印刷中なのかプレビューなのか判断したいときがありませんか。

例えば、罫線、項目名が印刷済みの用紙にデータのみ印刷するのだか、プレビューでは確認のために罫線、項目名も表示したい。

あるいは、プレビューには表示しないが、印刷時には、「試用版」とか「社外秘」とかの文字を背景に表示したい。

はたまた、実際に印刷した日時とか回数を保存しておきたい。

レコード毎に印刷済みかどうか記録しておきたい。印刷ダイアログでページ指定して印刷した場合でも、正確に記録したい。

今回はこの方法について紹介します。

難易度:

概要

印刷中は、ウィンドウが無効(キー入力を受け取れない状態)になることを利用して、それをWindows APIで判断するという方法です。具体的には、レポートのイベントで APIの IsWindowEnabled が 0 を返すときは印刷中となります。

標準モジュールの宣言部にAPIの参照を宣言します。

確認用コード

プレビューかどうかは、レポートのアクティブ時イベントが発生するかどうかで判断できます。

上記のコードは動作確認用のコードですので実用的ではないです。実用的な使用例をいくか挙げてみます。

印刷時のみ表示

印刷時のみ特定のコントロール(ラベル1)を表示する。
「試用版」「社外秘」などのウォータマークを表示するときなど。

プレビュー時のみ表示

プレビュー時には罫線、ラベル、テキストボックス等すべて表示して、印刷時には罫線(直線コントロール)、ラベルを表示しない。
印刷済みの定型用紙にデータのみ印刷する場合など。

印刷日時をテーブルに履歴として記録しておきたい。

社員番号が主キーのレポートで印刷した場合は、「社員印刷履歴」テーブルに社員毎に印刷日時を登録する例。

フォーマット時ではなく印刷時に設定すること。フォーマット時だと総ページ数を表示させている場合、2回登録されてしまう。また、印刷ダイアログでページ指定して印刷した場合は、印刷しないページの分も登録されてしまう。

また、納品書等で、ヘッダーと詳細があり、伝票毎に登録したい場合は、グループヘッダーの印刷時イベントで登録するようにする。

補足
APIを使わずに判断する方法を YU-TANGさんが公開されています。APIは使いたくないという場合はこちらの方法をどうぞ。
印刷かプレビューか、それが問題だ | YU-TANG's MS-Access Discovery

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/170-2a98040d
該当の記事は見つかりませんでした。