#637 レポートのレコードをフォームと同じに設定するには? レポート、VBA

現在表示されているフォームと同じレコードソースで、もしくはユーザー操作によってフィルタがかけられている場合にはそれを反映させた形で、すなわち画面に表示されているのと同じデータをレポートとして印刷/プレビューさせる方法です。

これは「#217 フィルタのかかったフォームの内容をレポートに出力する方法」の別版です。レポートを開く側のフォームのプログラムで設定するのではなく、開かれる側のレポートのモジュールでその操作を行う例です。レコードソース自体も動的に設定しますので、同じフィールドを持った別のテーブルやクエリなどをひとつのレポートで切り替えて出力させるといった使い方にも応用できます。


それには、レポートの「Open/開く時」イベントプロシージャに次のようなコードを記述します。

Private Sub Report_Open(Cancel As Integer)

  With Forms!frm商品マスタDS
    'レコードソースをfrm商品マスタDSと同じに設定
    Me.RecordSource = .RecordSource
    'フィルタをfrm商品マスタDSと同じに設定
    Me.Filter = .Filter
    Me.FilterOn = True
  End With

End Sub


【実行例】
■そのままプレビューしたとき





■フォームでフィルタをかけてからプレビューしたとき





【注意事項】
フォームにフィルタをかけるとその抽出条件がフォームの「Filter/フィルター」プロパティに保存されることがあります。設定(「読み込み時にフィルタを適用」プロパティ)によっては次回フォームを開いたときにその抽出が実行されるとは限りませんが、内部的にプロパティ値として保持されていることがあります。
したがって、次回フォームを開いた直後は全レコードが表示されているにも関わらず、レポートを開くとフィルタがかかってしまいます。その対策として、フォーム読み込み時などのイベントプロシージャで「Filter/フィルター」プロパティに空白「””」を代入することで回避できます。
| Index | Prev | Next |



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