Accessでフォームのフィルター(抽出)結果をレポートにも反映させる

フォームで抽出したレコードを、そのままレポートでも印刷する方法を紹介します。

■作成方法

  1. フォームとレポートを同じレコードソースで作成します。
  2. フォームにコマンドボタンを追加し、VBAでボタンがクリックされるとレポートが開くようにします。
    こうする理由は、フォームのフィルターを使用するため、レポートが開く時点でフォームも開いている必要があるためです。
  3. レポートが開く時(Load)イベントに、フォームのFilterプロパティとFilterOnプロパティをレポートに代入します。
BackHome Backレポート


■ レポートを開くフォームの作成

下のような都道府県人口のフォームを作成しました。

フォームヘッダーにコマンドボタンを追加しています。

都道府県人口のフォーム

実行すると、47都道府県の人口一覧が表示されます。

47都道府県の人口一覧が表示

印刷ボタンにクリックイベントを設定します。

コマンドボタンを選択した状態で、プロパティシートの[イベントタブ]~[クリック時]で[イベント プロシージャ]を選択します。

[クリック時]で[イベント プロシージャ]を選択する

レポートを開くVBAを入力します。

レポートを開くVBA

・DoCmd.OpenReportの引数Viewが、acViewPrevieで印刷プレビューを表示します。印刷するには、acViewNormal(既定値)になります。


Option Compare Database

Private Sub コマンド9_Click()
    DoCmd.OpenReport "R_都道府県人口", acViewPreview
End Sub



■ フォームのフィルターを反映するレポートを作成する

下のような都道府県人口を印刷するレポートを作成しました。
都道府県人口を印刷するレポートを作成

印刷プレビューすると、47都道府県の人口が表示されます。
印刷プレビュー

フォームのフィルターを反映させるVBAを作成します。
レポートデザインで、プロパティシートの[イベントタブ]~[開く時]で[イベント プロシージャ]を選択します。
[開く時]で[イベント プロシージャ]を選択する

フォームのFilterとFilteOnプロパティをレポートに代入するVBAです。
フォームのFilterとFilteOnプロパティをレポートに代入するVBA

・フォームが開いていない場合エラーになるので、レポートを単独で使用する場合は、フォームが開いているか判定したり、エラー処理を追加するなどの対処が必要になります。

Option Compare Database

Private Sub Report_Open(Cancel As Integer)
    Me.Filter = Forms!F_都道府県人口.Filter
    Me.FilterOn = Forms!F_都道府県人口.FilterOn
End Sub

フォームで人口が700万のフィルターを設定しました。
フィルターが設定されている場合、下のステータスバーに「フィルター適用」と表示されます。
印刷ボタンをクリックしレポートを開きます。
フォームで人口が700万のフィルターを設定

開いたレポートにフォームのフィルターが反映され、フォームと同じレコードが表示されています。
またレポートにも同様に、下のステータスバーに「フィルター適用」と表示されています。
開いたレポートにフォームのフィルターが反映されている


BackHome Backレポート

Copyright(C) FeedSoft