お世話になります。
クエリA・・・フィールド[区分]、[担当]、[金額]
クエリB・・・クエリAのグループ集計 フィールド[担当(グループ化)]、[金額(合計)]
フォームA・・・レコードソースはクエリB
フォームB・・・実行するフォーム
フォームBから DoCmd.OpenForm で、フォームAを抽出条件を指定して開きたい場合、
例えば
DoCmd.OpenForm "フォームA" , , , [クエリB]![担当]=[Forms]![フォームB]![担当]
とすると、フォームBの[担当]と一致したレコードが表示されるのは分かるのですが、
クエリAの中の[区分]を抽出条件で指定してフォームAを開きたい場合、どのように書けば良いのでしょうか?
クエリBには[区分]フィールドはありません。(金額がバラけてしまうため)
クエリA[区分]フィールドの抽出条件に [Forms]![フォームB]![区分] と書けば簡単なのですが、文字数制限の絡みでVBAで処理をしたいと考えています。
もし可能であれば、ご教授お願い致します。
クエリB は担当毎の集計、
欲しいのは、担当+区分毎の特定の区分の集計、
まったく別の出力なので一つのクエリで実現は不可能です。
クエリC・・・[担当、区分(グループ化)]、[金額(合計)]
というクエリを作成しておいて、フォームA を開く時に、レコードソースを書き換えるようにすればいいでしょう。
というように OpemArgs引数(第7引数)にクエリ名を設定しておいて、
フォームAの開く時のイベントプロシージャに下記のように記述します。
ご回答ありがとうございます。
クエリC・・・[担当(グループ化)]、[区分(グループ化)]、[金額(合計)] ということでいいんですよね??
例えば抽出条件式に
と記述しても開く時にパラメータの入力を求められてしまいます。"抽出条件式"にはフォームAに関係しているフィールドしか記述できませんか?
区分の抽出をしたい場合はクエリCの抽出条件に書き込むしかないのでしょうか?
前回の回答を下記に修正します。
まず、フォームのデザインビューで「レコードソース」プロパティをは空白にしておいてください。
開く時のイベントプロシージャは下記にしてください。
フォームを開く時は、OpenArgs には、テーブル名かクエリ名を設定しておいてください。
ご回答ありがとうございます。
修正版のアドバイスでレコードソースの置き換えには成功しました。
申し訳ございません、もう1点確認したいのですが、
ここの"抽出条件"は、あくまでフォームAに対する抽出条件になるのでしょうか?
たとえば "[クエリC]![区分]= '" & [Forms]![フォームB]![区分] & "' " と入力しても無視されます…
クエリCの抽出条件をVBA上で行いたい場合、上記の一文で対応可能でしょうか?
不可の場合、別途構文を用いることで可能になるのでしょうか?
お手数をおかけしますがご確認よろしくお願い致します。
すみません。サンプル作成して動作確認してみましたが、抽出条件が無視されますね。
下記に修正してください。
開く時のイベントプロシージャ
フォームを開くコードは、下記で。
第7引数に、"クエリ名;抽出条件" というようにクエリ名と抽出条件を;で区切って設定してください。
ご回答ありがとうございます。
無事に抽出条件が適用されたフォームを開くことができました。
意図的に抽出条件の枠を作る発想は思いつきませんでした。
申し訳ございません、さらに突っ込んだ質問をさせてください。
クエリA・・・フィールド[区分]、[担当]、[金額]、[受注日]
クエリC・・・クエリAのグループ集計 フィールド[担当(グループ化)]、[区分(グループ化)]、[金額(合計)]、[受注日(where条件)](抽出条件を書かないと保持されないですが・・・)
クエリAに[受注日]を追加して日付で範囲指定したい場合、;後の抽出条件で書くことは可能でしょうか?
クエリCには表示されないフィールドなので無理でしょうか・・・?
クエリCを、クエリAのグループ集計 フィールド[担当(グループ化)]、[区分(グループ化)]、、[受注日(グループ化)]、[金額(合計)]
として、
OpenArgs引数に "受注日 between #" & Me.受注日自 & "# And #" & Me.受注日至 & "#"
ではダメですか。
あるいは、クエリは使わずに、 フォームを開く時に、RecordSource に直接 SOL文を設定してしまうという方法もあります。
早々のご返信ありがとうございます。
受注日はグループ化したくないのです。金額が受注日ごとにバラけるのは避けたいので…
なんとかグループ化せずに(フィールドに乗せずに)抽出条件を書けないものでしょうか?
…というか書いてて思ったのですが、これは最初に回答いただいた「別の出力なので一つのクエリで実現は不可能」に繋がりますか…?
クエリは使わずに、 フォームを開く時に、RecordSource に直接 SOL文を設定してしまうという方法になりますね。
ご回答ありがとうございます。
ひとまずRecordSource に直接 SOL文を書く方向でトライしてみます。
またどうしても分からないときは質問させていただきます。
質問に回答いただきありがとうございました。