1

リストから値を選択するために使用できるいくつかのリスト ボックスを含むフォームがあります。フォームの値をフィルターとして使用するクエリがあります。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

スクリプトがアクティブな間、クエリはフォームにアクセスできないようです。しかし、ウォッチ ウィンドウでは、スクリプトはすべてのフォーム コントロールの値を認識しています。

助けていただけますか?ありがとうございました。

4

1 に答える 1

1

フォームの値 [レポート - 詳細] を SQL ステートメントの外に引き出すことを検討してください。詳細については、SO answerを参照してください。

前述のとおり、フォーム値は VBA で使用されるレコードセットでは使用できません。

于 2013-05-01T20:16:36.280 に答える