リストから値を選択するために使用できるいくつかのリスト ボックスを含むフォームがあります。フォームの値をフィルターとして使用するクエリがあります。VBAスクリプトを使用してクエリを開こうとするまでは、組み合わせは正常に機能します。その時点で、クエリにパラメーターが必要であるというエラー メッセージが表示されます。コード セグメントは次のとおりです。
クエリ - [エンティティの選択] - フォームを使用します (一度に 1 つのリスト ボックスのみが使用されます - これにより、それがどれであるかが検出され、テーブル [エンティティ リスト] から適切な項目が選択されます):
SELECT val(forms.selections.select_year) as Yr, *
FROM [entity list]
where [group]=forms!selections!select_group
UNION select val(forms.selections.select_year) as Yr, * from [entity list] where [G_SG]=forms!selections!select_subgroup
UNION select val(forms.selections.select_year) as Yr, * from [entity list] where [ID_Name]=forms!selections!select_entity
UNION select val(forms.selections.select_year) as Yr, * from [entity list] where forms!selections!select_group like "All*";
クエリ - 前のクエリの結果を使用します。
SELECT ...
FROM [DTXX Detail]
INNER JOIN [Entity selections] ON ([DTXX Detail].Yr = [Entity selections].Yr) AND ([DTXX Detail].entityid = [Entity selections].EntityID)
ORDER BY ...
これらは正常に動作します - [entity selections] クエリは適切な行を返し、2 番目のクエリは 1 番目をフィルターとして正常に使用し、適切な行を返します。
次に、上記のような多数のレポートを Excel ファイルに出力する VBA スクリプトを追加しました (このスクリプトは、他のデータベースでフォームなしで動作しました)。スクリプトの関連部分は
Source = "[" & Exports.Fields("Source") & "]"
Source = "Select * from " & Source & ";"
If ((Source <> "") And (WS_Name <> "")) Then
'Get the source data
Set source_data = DB.OpenRecordset(Source)
Source
これSelect * from [report - details]
は、上記の 2 番目のクエリの名前です。複雑なことは何もありません。私が得るエラーは次のとおりです。
Runtime error 3601. Too few parameters. Expected 4
スクリプトがアクティブな間、クエリはフォームにアクセスできないようです。しかし、ウォッチ ウィンドウでは、スクリプトはすべてのフォーム コントロールの値を認識しています。
助けていただけますか?ありがとうございました。