#731 プレビューからの印刷で想定した動作にならないときの確認事項 レポート、VBA

例としてここでは次のようなデザインのレポートがあるとします。


ここでのポイントとして、ページヘッダーにあるラベルの標題は「Open/開く時」イベントプロシージャで動的に設定するようにしてあります。具体的には現在時刻を出力しています。

Private Sub Report_Open(Cancel As Integer)

  Me!lblタイトル.Caption = "現在時刻: " & Format$(Now(), "hh:nn:ss")

End Sub


これを実行(プレビュー)してみると下図のようになり、ここまでは思った通りの動きをしています。


しかし、そのプレビューの状態からすぐに印刷を実行すると次のようになります(ここでは実際にはPDFファイルに出力しています)。


一見正しく処理されているように思えますが、プレビューしたときから時間が経過しているのに現在時刻はプレビュー時のものと変わっていません。

もちろん、その方が都合がよいという場合も多々ありますが、厳密に現在時刻を出力したいといった場合には正しい出力結果とは言えません。また今回は現在時刻出力というシンプルな例ですのでさほど大きな問題でないかもしれませんが、もし何らかのPublic変数を初期化したり設定したりしてそれをあとでいろいろな処理・もっと重要な処理に使うといった場合、そこでまったく想定外の動きをしてしまう可能性もあります。

これは、『「Open/開く時」イベントは プレビュー → 印刷時 には発生しない』というレポートの特性によるものです。もしプレビューからの印刷で想定した動作にならないという場合には、これを確認し、それに対応した修正を行う必要があります。

それには多くの場合、上記のコードを『レポートヘッダーの「Format/フォーマット」イベントプロシージャに移行する』ことで解決できます。

上記の例では下記のようになります。

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

  Me!lblタイトル.Caption = "現在時刻: " & Format$(Now(), "hh:nn:ss")

End Sub


同様にまずプレビューを行いそこから印刷を行うと、今度は下記のようになります。現在時刻が進んで、イベントプロシージャがそれぞれで実行されていることが分かります。


| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved