DoCmdオブジェクトのOpneReportメソッド内の「OpenArgs」を利用します。初めて知ったときはかなり感動したことを覚えております。これを知る前までは、レポート上のマクロでフォームの値を直接参照させるという方法を私は取っていました。
フォームに入力した情報をレポートに渡す方法です。フォームの情報を元にレポート上で処理を分岐する際などにも利用できると思います。
今回のサンプルは、フォームに入力した文字列をレポートに反映しています。

OpenArgs実装サンプル
サンプルのAccessDBの構成は次の通りです。
【フォーム】F_sample
コマンドボタン内にテキストボックスの値をレポートに渡す
【説明】レポート「R_sample」を開く際に、フォーム上のテキストボックスの値(txt_args)を引数:OpenArgsにセットする
Private Sub cmd_print_Click()
DoCmd.OpenReport “R_sample”, acViewPreview, , , , Me.txt_args
End Sub
【レポート】R_sample
受け取った値(OpenArgs)をレポートのヘッダーにセットする
【説明】Me.OpenArgs で、フォームから受け取った値を利用します。例では、レポートのラベルに受け取った文字列をセットしています。
Private Sub Report_Load()
Controls(“lab”).Caption = Me.OpenArgs
End Sub
レポート渡しを使う局面
フォームからレポートへの値を渡す方法は次のような時に利用できるでしょうか
- フォーム上の選択結果でレポート上の表示・非表示を切り替える
- レポートのプリンタやプレビュー・印刷モードを切り替える
- フォーム上の文字列をレポートに設定する
など、ReportのOpenイベント上でifなどで条件分岐をさせることで、柔軟な処理が出来ると思います。
フォームに入力した情報をレポートに渡すサンプルAccessファイル
OpenArgsを使ったレポートからフォームへの値を渡すサンプルVBAが含まれたファイルはここからダウンロードしてください。
応用例
フォーム上で「OpenArgs」に渡す値を配列型にすることで、複数の値をレポートに渡すことも可能です。