フォームで抽出したレコードを、そのままレポートでも印刷する方法を紹介します。
■作成方法
- フォームとレポートを同じレコードソースで作成します。
- フォームにコマンドボタンを追加し、VBAでボタンがクリックされるとレポートが開くようにします。
こうする理由は、フォームのフィルターを使用するため、レポートが開く時点でフォームも開いている必要があるためです。
- レポートが開く時(Load)イベントに、フォームのFilterプロパティとFilterOnプロパティをレポートに代入します。
■ レポートを開くフォームの作成
下のような都道府県人口のフォームを作成しました。
フォームヘッダーにコマンドボタンを追加しています。
実行すると、47都道府県の人口一覧が表示されます。
印刷ボタンにクリックイベントを設定します。
コマンドボタンを選択した状態で、プロパティシートの[イベントタブ]~[クリック時]で[イベント プロシージャ]を選択します。
レポートを開くVBAを入力します。
・DoCmd.OpenReportの引数Viewが、acViewPrevieで印刷プレビューを表示します。印刷するには、acViewNormal(既定値)になります。
Option Compare Database
Private Sub コマンド9_Click()
DoCmd.OpenReport "R_都道府県人口", acViewPreview
End Sub
■ フォームのフィルターを反映するレポートを作成する
下のような都道府県人口を印刷するレポートを作成しました。
印刷プレビューすると、47都道府県の人口が表示されます。
フォームのフィルターを反映させる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万のフィルターを設定しました。
フィルターが設定されている場合、下のステータスバーに「フィルター適用」と表示されます。
印刷ボタンをクリックしレポートを開きます。
開いたレポートにフォームのフィルターが反映され、フォームと同じレコードが表示されています。
またレポートにも同様に、下のステータスバーに「フィルター適用」と表示されています。