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出力も非常に便利な機能となります。
コメント