#732 レポートのPDFエクスポートで抽出条件を反映したいときの対処方法 レポート、VBA

レポートをPDFファイルにエクスポートしたい場合に使う「OutputTo」メソッドの構文は次のようになっています。

DoCmd.OutputTo acOutputReport, <レポート名>, acFormatPDF, <PDFファイルのパス> 〜〜以下略

レポートをプレビュー・印刷する「OpenReport」メソッドとは異なり、レコードソースに抽出条件を指定する引数はありませんので、すべてのレコードを出力することになります。

そのようなとき、レポートのレコードソースとなるクエリのSQL文を事前にVBAで書き換えたり、レポート内のモジュールで抽出条件を都度変更したりといった方法もありますが、ここではクエリやレポートは一切変更せず、”レポートを開く側のプログラム”で動的に都度抽出条件を切り替えてみます。

※抽出条件に常に同じフォームの同じコントロールだけを参照するのであれば、「Forms!フォーム名!コントロール名」のような書き方でそれをクエリ内の抽出条件に設定するという方法もあります。


それには、次のようなコードを実行します。ここでは「R_名簿」を「D:\名簿.pdf」にエクスポートしています。

With DoCmd
  .OpenReport "R_名簿", acViewPreview, , <抽出条件>, acHidden
  .OutputTo acOutputReport, "R_名簿", acFormatPDF, "D:\名簿.pdf"
  .Close acReport, "R_名簿"
End With


ポイントは、『(1)抽出条件を指定してレポートを(2)非表示で(3)プレビューし、そのまま続けて(4)PDFファイルにエクスポートする』ことです。

  1. 「OpenReport」メソッドの4番目の引数、<抽出条件>となっている部分に、実際には都度異なるWHERE式を設定します。

  2. あくまでもPDFファイルにエクスポートするのが目的ですので、プレビューをユーザーに見せる必要はありません。そこで、「OpenReport」メソッドの5番目の引数に「acHidden」を指定しています。

  3. 抽出条件を反映させたレポート内容をエクスポートするために、いったんレポートをプレビューのモードで開きます。・・・2番目の引数に「acViewPreview」を指定

  4. PDFファイルにエクスポートする、本来の「OutputTo」メソッドを実行します。

  5. 後処理として、非表示で開いたレポートを閉じておきます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved