MS Access

Accessでレポートのレコードソースを動的にセットしたい

投稿日:2013年5月2日 更新日:

今までは、フォーム上のボタンをクリックしたら、レポートをデザインで開いてからレコードソースをセットしなければならないと思っていた。
つまり、こんなやり方をやっていた。

フォーム:

 【ボタン1をクリック時】
DoCmd.OpenReport "新規顧客はがき", acDesign
Reports("新規顧客はがき").RecordSource = "新規顧客はがき用1"
DoCmd.OpenReport "新規顧客はがき", acPreview

【ボタン2をクリック時】
DoCmd.OpenReport "新規顧客はがき", acDesign
Reports("新規顧客はがき").RecordSource = "新規顧客はがき用2"
DoCmd.OpenReport "新規顧客はがき", acPreview

しかし、このやり方だと、共有でフォームを開くときにうまくいかないことがわかった。
そこで、フォームからレポートに引数を渡し、レポート側でも処理を分岐することにした。
これだとうまくいった。

フォーム:

【ボタン1をクリック時】
DoCmd.OpenReport "新規顧客はがき", acPreview, , , , "1"

【ボタン2をクリック時】
DoCmd.OpenReport "新規顧客はがき", acPreview, , , , "2"

レポート:

Select Case Me.OpenArgs
Case "1"
Reports("新規顧客はがき").RecordSource = "新規顧客はがき用1"
Case "2"
Reports("新規顧客はがき").RecordSource = "新規顧客はがき用2"
Case Else
MsgBox "データセット名にエラーがあります。"
Exit Sub
End Select

実際にコードを修正すると、レポートを開くスピードが劇的に速くなった。
共有でも安心。

-MS Access

執筆者:

関連記事

no image

Accessでのキーワード検索(フィルタ)とブックマークの関係備忘録

Accessでのキーワード検索(フィルタ)とブックマークの関係を作るのに苦労したのでここに備忘録。 ポイントは、検索ではなくフィルタを使うことと、BookmarkではなくIDをグローバル変数に保存して …

no image

Accessの再クエリーでデータが移動してしまうのを解消

仕事メモ。 メイン・明細フォームのときは、 http://www.sanryu.net/acc/tips/tips323.htm を参考に、 Dim m_offset As Long ‘レ …

no image

Accessのパラメータは クエリのみならず、SQL文字列でも できるとは。。。

以下のリンクが参考になった。 パラメータの設定方法がわかりません。パラメータの設定を行ってい… – Yahoo!知恵袋 以下は、自分の業務で作成したコード。 Dim dbs A …

no image

Accessであらかじめリンクテーブルを開いておくと劇的に高速化

リンクテーブルに対して「Dlookupで値を探して見つかったらCurrentDb.Execute UPDATE~ で値を更新」という処理をループで回している。 この処理、一旦始めると、終えるのに30分 …

no image

サブフォームで苦労

Access覚書。 サブフォームつきのフォームからダイアログ・フォームを呼び出す。 ダイアログフォームのリスト形式のレコードをクリックしたら、呼び出し元のフォームのサブフォームに値を追加して、次のため …