• ベストアンサー

Accessのコンボボックスの設定について(値集合ソース)

フォームのコンボボックスに表示させたい値を 値集合ソースにてSQLを直接書いています。 例を挙げますと、 テーブル:CstmTBL 項目:Cstm_ID,Cstm_Name,FLG 値集合ソース:SELECT Cstm_ID FROM CstmTBL Where FLG = '1' ここまでであればうまくいきます。 私がやりたいのは、 このFROM句のテーブルを上位(例えば上位のコンボボックスで指定したテーブル名)で設定し、 そこで設定されたテーブルを毎回そのSQLに埋め込んで抽出されるようにしたいのですが、うまくいきません。VBAを書かないとだめでしょうか? 書くとすれば、書き方も教えていただけますか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

No.2です。 前回のVBAをより明示的(?)にしてみます: Private Sub 指定テーブル_AfterUpdate() [表示コンボ].RowSource = "SELECT Cstm_ID FROM " & [指定テーブル] & " Where FLG = 1" End Sub つまり、「[指定テーブル]」は「指定テーブル」というテキストではなく、「指定テーブル」コンボボックスに入力した値を参照することを意味しています。 > その抽出結果をどう次のコンボボックスに引き渡すのでしょうか? 「次のコンボボックス」の名前が、上の例では「表示コンボ」となっています。 つまり「表示コンボ」コンボボックスの「.RowSource」(=値集合ソース)に、上記演算結果を代入することを意味しています。 例えば、「指定テーブル」コンボボックスに「CstmTBL」を入力すると、「表示コンボ」コンボボックスの値集合ソースには、   "SELECT Cstm_ID FROM " & [指定テーブル] & " Where FLG = 1" の演算結果である   SELECT Cstm_ID FROM CstmTBL Where FLG = 1 が入力されることになります。 「指定テーブル」に「AnotherTBL」を入力した場合は、同様に   SELECT Cstm_ID FROM AnotherTBL Where FLG = 1 が入力されます。 「AfterUpdate」(=更新後処理)というのは、「そのコントロールの更新後に実行される処理」なので、上記VBAを記述しておけば、「指定テーブル」コンボボックスを更新により、自動的に「表示コンボ」コンボボックスの値集合ソースが切り替えられることになります。 もし疑問点がありましたら、遠慮なくご質問下さい。

nana_poco
質問者

お礼

お礼が遅くなってすみません。本当にご丁寧に教えてくださりありがとうございます。お陰で、すっきり理解することができて、うまくいきました。また、機会がありましたらお願いいたします。

nana_poco
質問者

補足

ありがとうございます。出張にいっており返事がなかなかできずすみません。。水曜日には帰社するので試してみます。

その他の回答 (3)

noname#27115
noname#27115
回答No.3

要は”指定テーブル”というコントロールがあってその子のトロールの更新後処理にイベントを書けってことだと思いますよ。 別にこれはテキストボックスでもかまいませんが、それよりもコンボボックスやリストボックスであった方が操作性はあがります。 コンボボックスやリストボックスだとあらかじめ値を登録(値集合ソース)しておく必要がありますね。

nana_poco
質問者

補足

ありがとうございます。 更新後にイベントを書くのはわかるのですが、 「そのコンボボックスで指定した値」をどう書いていいのかわからないのと、その抽出結果をどう次の コンボボックスに引き渡すのでしょうか?

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

テーブルを指定するコンボボックスの更新後処理イベントで、Cstm_IDを表示させるコンボボックスの値集合ソースを代入する形がよいかと思います。 VBAでやるのでしたら、プロパティシートの「イベント」タブの「更新後処理」イベントにカーソルをおき、ビルダをクリックして「イベントプロシージャ」をクリックしたら、以下の文を貼り付けて下さい: Private Sub 指定テーブル_AfterUpdate() 表示コンボ.RowSource = "SELECT Cstm_ID FROM " & 指定テーブル & " Where FLG = 1" End Sub これでいけると思います。 (Cstm_IDを表示するコンボボックスの名前を「表示コンボ」と、テーブルを指定するコンボボックスの名前を「指定テーブル」としています)

nana_poco
質問者

補足

ご親切にありがとうございます。 VBAの部分はわかったのですが、 「テーブルを指定するコンボボックスの更新後処理イベントで、Cstm_IDを表示させるコンボボックスの値集合ソースを代入する形がよいかと思います。」 の部分がよくわかりません、具体的に教えていただけますか?

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

このへんのサポートは参考になりませんか? コンボ ボックスの内容を制限する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;879979 コンボボックスに表示される値集合ソースを変更する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;879797

関連するQ&A