#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/フィルター」プロパティに空白「””」を代入することで回避できます。 |
|||
|
Copyright © T'sWare All rights reserved |