AccessレポートのレコードソースをVBAで修正する方法についてご紹介します。
基本的にレポートのレコードソースは、テーブルだったりクエリーで使用することが多いですが
 クエリーのメリットは、SQLを視覚的に操作して作れるのがメリットとなります。
 しかし便利な反面、デメリットもあります。
 例えば、テーブルの項目名を変更したり追加・削除の際に、
 同様に参照しているクエリーを全部修正しないといけないので、メンテナンスが難しくなってしまうのです。
よってクエリーの多用は厳禁です。
 また、クエリーとテーブルの設計書を作成しておくと、後々メンテする際に良いです。
 特にクエリーがどのテーブルのどの項目を参照しているとわかっていると便利です。
前置きはこのくらいにしまして、本題に入ります。
レポートのレコードソースをVBAで修正
DoCmd.SetWarnings False
'レポートのレコードソース編集
DoCmd.OpenReport "R_XXX通知書", acViewDesign
Reports("R_XXX通知書").RecordSource = "社員テーブル2025"
DoCmd.Close acReport, "R_XXX通知書"
DoCmd.SetWarnings True
コード解説
1行目
 DoCmd.SetWarnings False
VBAでレポートをデザインモードで開いて修正したり閉じる際に
 メッセージが表示されるのを防ぐために記述します。
 true falseの意味としては、yes no と同じ意味合いです。はい、いいえ
 ワーニングメッセージをfalseにしているので表示しない指示になります。
4行目
 DoCmd.OpenReport "R_XXX通知書", acViewDesign
開く理由はレコードソースを設定したいからです。
 手動で普段レポート>デザインで修正すると思いますが
 これをVBAで行うことによってボタン1本でできてしまうという事です。
5行目
 Reports("R_XXX通知書").RecordSource = "社員テーブル2025"
レポートのレコードソースを変更しています。
Accessイメージ

Accessレポートをデザインビューで開いてプロパティを開くとレコードソースの項目があります。
 
ここをテーブルやクエリーに指定するとレポートが表示されますが
 レコードソースは基本的に固定で行うことが多いため、VBAで自動的にレコードソースを
 セットしてあげることによりわざわざ手動でレコードソースを変更しなくても良いようにしました。
代案(1)
テーブルは1つのものを使用していくのが良いのかもしれませんが
 用途はそれぞれなので、例えばレポート用のテーブルを作成しておいて
 条件(日付)で出力条件に満たしたもののみをレポート用のテーブルに値をセットして
 レポート表示するという手もあります。
代案(2)
また、レポートを使用しないでExcelテンプレートを使用することも可能です。
 1つExcelのテンプレートを用意しておき、所定のセルにテーブルの値をセットして別名で出力する。
 それを繰り返すことで大量の出力が可能となります。
 Excelを非表示で起動して操作して出力だけすることが可能なので、
 Excelテンプレートを使用したPDF出力も非常に便利な機能となります。

コメント