dポイントプレゼントキャンペーン実施中!

Access パラメータークエリ VBAの書き方について
よろしくお願いします。
①クエリでデータを絞る
②絞ったデータを行ごとにまとめるクエリにかける
③その結果をボタンを押したらテキスト5にひとまとめにする
といったものをいくつか作りました。
こちらは固定のものなので問題なく動きましたが、新しく①をパラメータークエリでデータを絞る必要があり、既存のコードを元に以下のコードを書いて③を実行しようとした際、
「3061/パラメーターが少なすぎます。4を指定してください」というエラー文が出ました。

Private Subコマンド11_Click()

Dim SQL As String
Dim rs As Recordset
Me!テキスト5 = Null
SQL = "SELECT * FROM ひとまとめクエリ"Set rs = CurrentDb.OpenRecordset (SQL)
Do Until rs.EOF
Me!テキスト5 = M!テキスト5 &rs![ひとまとめ] &vbCrLf
rs.MoveNext
Loop
Set rs = Nothing

End Sub

*ひとまとめクエリが②のクエリ名です
*[ひとまとめ]はテキスト5と同じフォーム内にあるひとまとめクエリのデータが表示されているテキストボックスの名前です。
*デバッグの際、Set rs : CurrentDb.OpenRecordset (SQL)の部分が黄色くなります

調べたところパラメーター名を足せばいいと出てきて試してみたのですが、サイトの書き方を真似して書き足してみても上記のエラーだけでなく「438/オブジェクトはこのプロパティ〜」や「424/オブジェクトが必要です」等、別のエラーが出てどうすればいいのかわからない状態です。
下記が新しく書き足したコードになります。

Private Subコマンド11_Click()
Dim SQL As String
Dim rs As Recordset
Me!テキスト5 = Null
Set myDb = CurrentDb
SQL ="SELECT *FROMひとまとめクエリ"With qdf
'フォーム参照パラメータ名にコントロールの値をセット
Set qdf = myDb.QueryDefs("ひとまとめクエリ")
.Parameters("[Forms]![フィルターフォーム]! [コンボ11]") = Forms!フィルターフォーム!コンボ11
.Parameters ("[Forms]![フィルターフォーム]! [コンボ13]") = Forms!フィルターフォーム!コンボ13
.Paransters ("[Forms]![フィルターフォーム]! [コンボ17]") = Forms!フィルターフォーム!コンボ17

Set rs = CurrentDb.OpenRecordset (SQL)
End With

Do Until rs.EOF
Me!テキスト5 = Me!テキスト5 &rs![ひとまとめ] &vbCrLf
rs.MoveNext
Loop
rs : Nothing
Set
End Sub

*パラメーターの指定はコンボボックスで設置してあり、3箇所あります

正直もうお手上げ状態のため、どうすれば上手くいくのか....
みなさまのお力を貸してほしいです。
よろしくお願いします。

A 回答 (1件)

Private Subコマンド11_Click()


Dim SQL As String
Dim myDb As DAO.Database
Dim Rs As DAO.Recordset
Dim Qdef As DAO.QueryDef
Dim strT As String

Me!テキスト5 = ""
Set myDb = CurrentDb

Set Qdef = myDb.QueryDefs("ひとまとめクエリ")
With Qdef
'フォーム参照パラメータ名にコントロールの値をセット
.Parameters("[Forms]![フィルターフォーム]![コンボ11]") = Forms!フィルターフォーム!コンボ11 'コンボの前後が全角[]でした。
.Parameters("[Forms]![フィルターフォーム]![コンボ13]") = Forms!フィルターフォーム!コンボ13
.Parameters("[Forms]![フィルターフォーム]![コンボ17]") = Forms!フィルターフォーム!コンボ17

Set Rs = Qdef.OpenRecordset
.Close
End With

Do Until Rs.EOF
strT = strT & Rs!ひとまとめ & vbCrLf
'Me!テキスト5 = Me!テキスト5 & rs![ひとまとめ]&vbCrLf
Rs.MoveNext
Loop
strT = Left(strT, Len(strT) - 2) '最後の改行削除
Me!テキスト5 = strT
Rs.Close: Set Rs = Nothing
Set myDb = Nothing

End Sub

では?
見落としがあるかもしれません。
    • good
    • 0
この回答へのお礼

細かくありがとうございます!!
未だVBA書き慣れていない為、全文書いていただけるの大変ありがたいです、、
おかげさまで解決の糸口が見えました、ありがとうございました!

お礼日時:2021/03/05 17:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A