• 締切済み

Access VBA クエリパラメーターについて

Access VBA についてご質問させていただきます。 AccessVBAにてフォームを起動したときに、ユーザーで作成したクエリにおいて各クエリのデータ件数を取得するプログラムを作成いたしました。 '各クエリの件数をカウントする処理 Public Sub Data_Count() 'カウント用変数を宣言して、初期化する Dim i, j As Integer: i = 0: j = 11: b = 0: Dim rs As Recordset: Dim str(1) As String Dim Fname As Form: Set Fname = Forms!F99_メイン Dim mydb As Database: Set mydb = CurrentDb 'クエリ名・エクセル名用配列を初期化する Erase QName: Erase EName: Erase Count 'クエリの数だけ繰り返す For Each myqer In mydb.QueryDefs If Left(myqer.name, 1) = "Q" And Left(myqer.name, 3) <> "Q0_" Then 'クエリ名用変数の要素数を変更し、クエリ名を格納する ReDim Preserve QName(i): QName(i) = myqer.name 'エクセル用変数の要素数を変更し、エクセルファイル名を格納する ReDim Preserve EName(i): EName(i) = QName(i) & ".xlsx" '件数用配列の要素数を変更する ReDim Preserve Count(i) 'クエリを開く Set rs = CurrentDb.OpenRecordset(QName(i)) 'クエリのレコードが0件の場合 If rs.EOF Then 'クエリの件数を保存する Count(i) = 0 'クエリのレコードが1件以上の場合 Else 'クエリの最終行に移動してクエリ件数を保存する rs.MoveLast: Count(i) = rs.RecordCount End If End If rs.Close i = i + 1 End If Next End Sub 上記のコードを実行してみたところ、ユーザーで作成したクエリを開く際に、 実行時エラー'3061':パラメーターが少なすぎます。1を指定してください。というエラーが発生してしまいました。 どのように修正すればよろしいでしょうか?

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>ユーザーで作成したクエリを開く際に これは、VBAコードの中でのSQL文は入っていない、 というこでいいですか。 変数宣言されていない変数があったり、IfとEnd If の数があっていなかったりしていますが、とりあえず  For Each myqer In mydb.QueryDefs のすぐ後に、  If myqer.Parameters.Count = 0 Then を入れてパラメータを含むクエリを除外してみてください。 このことは、 https://okwave.jp/qa/q9691957.html の中でも述べている通りなのですが、読まれて いないのですかね。 なお、上記のリンク先のコードには、訂正しなければ ならない箇所が、       If Dir(strPath & strFileName) <> "" Then         Kill strPath & strFileName       End If を       Set db = CurrentDb の前後に移してください、と他の質問の回答時にお願いして いますが、それは訂正されたでしょうか。回答後に訂正 しようとしたら間に合わなかったので迷惑をかけましたが。 もし、これで同様のエラーがでるようならば、クエリの SQL文の中に問題が存在することになります。つまり クエリの作り方が間違っている可能性があります。 それと重要なことですが、    Count というワードは変数として使わないでください。これは VBAのオブジェクトのキーワードとしてプロパティなどに 使用されるものですから、質問のような使い方をしていると とんでもないことが起こる可能性があります。使うなら    myCount のように修飾をして使ってください。 なお、コード表のツールからオプションを選択し、その中の    変数の宣言を強制する にチェックを入れてください。そしてプロシージャの作成後は 必ずデバッグからコンパイルをする癖をつけてください。 Excelでの悪いやりかたをそのままにしているような感じです。

  • iruyasu
  • ベストアンサー率37% (3/8)
回答No.2

例えば、フォーム上の値を抽出条件にしているクエリーを VBAで呼び出した場合などに、そのエラーになります。 どんな条件で呼び出すクエリーなのかを無視して、 件数だけ取得しようなんて無茶です。

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

SQL文がわかりませんが、クエリで設定しているパラメータに値を設定してないからだと思います。 そこを確認してみてください。

関連するQ&A