Microsoft Access 掲示板

【ゆる募】抽出条件だけが違うクエリを1つにまとめる方法【なる早】

8 コメント
views
4 フォロー

実現したいこと

抽出条件だけが異なるクエリをひとつにまとめたい😘

前提

A、B、Cという3つのレポートがあり、B・CはAのレポートのコピー、レコードソースはAのレコードソースに抽出条件を咥えたものです😀

発生している問題・エラーメッセージ

別の抽出条件でレポートを出したいと考えるたびにレポートとクエリの数が増えるので管理がし辛いです😤😤😤

試したこと

AのレポートかAのレコードソースのクエリに工夫をして、「F1フォームからレポートAを開いたらBの抽出条件が適用される」「F2フォームからレポートAを開いたらCの抽出条件が適用される」みたいなミラクル挙動を実現したいです

Muramasa
作成: 2023/11/13 (月) 14:46:58
通報 ...
1
hiroton 2023/11/13 (月) 15:10:28 0d37e@f966d

レポートを開く時に追加の抽出条件を加えればいいですよ

DoCmd.OpenReport メソッド (Access)

expression.OpenReport (ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)

DoCmd.OpenReport Aレポート, , , (B用の追加の抽出条件)

※「同時に複数のレポートを画面に表示したい」となるとこれだけではうまくいかないですが

2
エピ 2023/11/14 (火) 09:06:16 b72a4@01eb4

Application.CurrentDb.QueryDefs("クエリ名").SQL = "SELECT FROM ***"
クエリの中身書き換えるとか

4
すずやん 2023/11/14 (火) 10:28:21 >> 2

つまり操作するルート(フォーム別等)によって、クエリの中身を置き換えるということですよね。

クエリ部分の文字列を変数で設定すればいいのではないでしょうか。

7

はい 変数でも直接でも問題ないと思います。

3
Muramasa 2023/11/14 (火) 10:26:05 7fdfc@46fae
Private Sub btn_担当者別プレビュー表示_Click()

    If Trim(Nz(cmb_担当者名, "")) = "" Then '担当者を選択していない場合
    
        Exit Sub
        
    End If
    
    DoCmd.Close acReport, "R_出力用レポート" '連続してプレビュー表示を押した時用
    DoCmd.OpenReport "R_出力用レポート", acViewPreview,,担当者=[Forms]![F_担当者別出力]![cmb_担当者名]
    DoCmd.RunCommand acCmdPreviewOnePage

End Sub

これで試してみましたが、フォームのコンボボックスから担当者を1人選ぶとその担当者以外のレポートも入ってしまっています。

また、標準モジュールにAutoFontSize関数を記述しているのですが、他の担当者を選択してプレビューを表示しようとすると、実行時エラー2185が出ます。このサイトと同じ状況です。

5
hiroton 2023/11/14 (火) 11:06:27 a415b@f966d

コピペされてないようなので何とも言えないですが

    '//検証用コード
    Dim strWhereCondition As String
    strWhereCondition = 担当者=[Forms]![F_担当者別出力]![cmb_担当者名]
    Debug.Print strWhereCondition
    '//検証用ここまで

    DoCmd.OpenReport "R_出力用レポート", acViewPreview,,strWhereCondition

として、コードを試してください
strWhereConditionTrueとなって、つまり全レコードを対象にするフィルタ(無意味)をかけてるんじゃないですかね


有効な SQL WHERE 句を文字列式で指定します。ただし、WHERE という語を指定する必要はありません。

なので、きちんとWHERE句の文字列になるように渡しましょう
あと、自身のフォームのコントロール(コンボボックス)を指定するときはMeキーワードを使用するといろいろと捗ります
ついでに、「担当者名」って文字列ですよね?

Private Sub btn_担当者別プレビュー表示_Click()

    If Trim(Nz(Me!cmb_担当者名, "")) = "" Then '担当者を選択していない場合

        Exit Sub

    End If

    DoCmd.Close acReport, "R_出力用レポート" '連続してプレビュー表示を押した時用
    DoCmd.OpenReport "R_出力用レポート", acViewPreview,,"担当者='" & Me!cmb_担当者名 & "'"
    DoCmd.RunCommand acCmdPreviewOnePage

End Sub

Private Sub btn_担当者別プレビュー表示_Click()

    If Trim(Nz(Me!cmb_担当者名, "")) = "" Then '担当者を選択していない場合
    
        Exit Sub
        
    End If
    
    DoCmd.Close acReport, "R_出力用レポート" '連続してプレビュー表示を押した時用
    DoCmd.OpenReport "R_出力用レポート", acViewPreview,,"担当者='" & Me!cmb_担当者名 & "'"
    DoCmd.RunCommand acCmdPreviewOnePage
End Sub

また、標準モジュールにAutoFontSize関数を記述しているのですが、

こっちはだいぶ問題が異なりそうなのでひとまず無回答で

6
Muramasa 2023/11/14 (火) 11:22:55 7fdfc@46fae >> 5

WHERE句?を正しく指定出来たら、きちんと各担当者のレポートだけが表示されるようになり、何故か実行時エラーの問題も解決しました!!クエリもレポートも減ってスッキリしました

8

お礼が抜けておりました、本当にありがとうございました🥰