Access

【VBA】パラメーターが少なすぎます。1を指定してください。

パラメーター

パラメータが少なすぎます。1を指定してください。
パラメータが少なすぎます。○を指定してください。

パラメータクエリーを使っていて、上記のようなエラーに遭遇していませんか?

このエラーはパラメータ指定に問題がある場合のエラーです

「クエリーをナビゲーションウィンドウから直接実行した時はエラーにならないのに・・・」と悩んでいる方。

パラメーターがフォーム参照になっているクエリーをVBAで実行しようとしていませんか?

フォーム参照のパラメータークエリーとは?

パラメーターとして表示されているフォームのコントロー値を指定しているクエリーのことです。
(例)

フォーム参照パラメーター

このパラメータークエリーは指定されているフォーム(Frm顧客登録)が開いている場合はダイアログ表示することなく実行可能です。

※指定のフォームが開いていない時は入力を求めるダイアログボックスが表示されます。

フォーム参照クエリーをVBAで実行するとこうなる

フォーム参照クエリーをVBAから実行すると、指定のフォームが開いていても閉じていても、以下のようなエラーとなります。

パラメーターエラー

これはパラメーターの指定がないというエラーです。

たとえフォームのコントロール値が参照できる状態であっても(そのフォームから起動していたとしても)パラメーターが「指定されていない」ことになってしまいます。

エラーを回避するための対処法

そもそも、VBAからパラメータークエリーを起動する場合、パラメーターは「パラメーター名」としてしか認識しません。

ナビゲーションウィンドウからの起動や、フォームのコントロールソースとしての利用の場合、パラメーターがフォーム参照形式になっていれば、自動的にパラメータ名を展開して解釈してくれます。

パラメータークエリーをVBAから実行する場合は、改めてパラメーター名に値をセットしてあげます。

Dim myDb  As Database
Dim myQdf As QueryDef
Dim myRs  As Recordset

Set myDb = CurrentDb
Set myQdf = myDb.QueryDefs("Qry顧客検索")

With myQdf
  'フォーム参照パラメータ名にコントロールの値をセット
  .Parameters("[Forms]![Frm顧客登録]![顧客ID]") = Forms![Frm顧客登録]![顧客ID]
  Set myRs = .OpenRecordset
End With

こうすることで無事にクエリーを実行することができます。

\逆引き辞書があると便利です/
[itemlink post_id=”1386″]

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。