質問: [Forms]![画面X]![画面X内のcmb] End With End With End Sub ``` 解決法がわかる方、もしくは検索方法がわかる方がいらっしゃいましたら教えていただけますと幸いです。 よろしくお願い致します。
回答: 「画面Y」のレコードソースが「クエリ1」ということですね。 勘違いしているようですが、QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースのパラメータークエリにパラメータが設定されるわけではありません。宣言したQueryDefをOpenRecorsetしたときに開かれるレコードセットに適用されますが、フォームとは無関係です。 ご希望のことは、画面X の テキストボックスやコンボボックスにデータが未入力の時に、その条件は無視したいということだと推測しましたが、あってますか。だとしたら、レコードソースには抽出条件は設定せずに、開くときに、抽出条件(フィルター)を設定すればいいかと思います。 画面X の 実行btn のクリック時に下記のように記述してください。 ``` Private Sub 実行btn_Click() Dim strFilter As String If Not IsNull(Me![画面X内のtxb1]) Then strFilter = " AND フィールド1='" & Me![画面X内のtxb1] & "'" End if If Not IsNull(Me![画面X内のtxb2]) Then strFilter = " AND フィールド2='" & Me![画面X内のtxb2] & "'" End If If Not IsNull(Me![[画面X内のcmb]) Then strFilter = " AND フィールド3='" & Me![[画面X内のcmb] & "'" End If strFilter = Mid(strFilter, 6) '先頭の不要な" AND "を除去 Docmd.OpenForm "画面Y", , , strFilter End Sub ``` フィールド名や条件は実際のものに合わせて変更してください。 誤解を招きかねない表現があったので、補足説明しておきます。 もし、QueryDef で開いたレコードセットをフォームのソースにしたい場合は、下記のようなコードになります。 ``` Private Sub Form_Load() Dim qd As DAO.QueryDef Dim rs As DAO.Recordset Set qd = CurrentDb.QueryDefs("クエリ1") With qd 'テキストボックス1 .Parameters("条件1") = Nz([Forms]![画面X]![画面X内のtxb1],"") 'テキストボックス2 .Parameters("条件2") = Nz([Forms]![画面X]![画面X内のtxb2],"") 'コンボボックス .Parameters("PARAMT") = Nz([Forms]![画面X]![画面X内のcmb],"") Set rs = .OpenRecordset 'クエリからレコードセットを開く Set Me.RecordSet = rs '開いたレコードセットをフォームのRecordSetプロパティに設定する End With End Sub ``` この場合は、レコードソースは空白にしておく必要があります。すなわち、**レコードソースと RecordSetプロパティは別物**ということです。RecordSetプロパティに OpenRecordset で開いたレコードセットを設定することはできますが、いろいろ制限がありますので、メリットはほとんどないと思います。