- ベストアンサー
ACCESSでフォームの明細で他の値を参照させたい
ACCESS2010でフォームで明細行のコンボボックスを、他のテキストボックスの値を使って 行単位で動的に変更したいのですが、どのようにしたらよろしいのでしょうか 例えば、 1行目のAのコンボボックスで「果物」を選択したら、Bのコンボボックスは「リンゴ・みかん・イチゴ」を表示させたい 2行目のAのコンボボックスで「野菜」を選択したら、Bのコンボボックスは「きゅうり・きゃべつ」を表示したい もちろん、テーブルに下記のように保存されています 【分類】|【名称】 野菜|きゅうり 野菜|きゃべつ 果物|りんご 果物|みかん 果物|イチゴ
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
2007 でやってみたものになりますが 提示テーブル名を「★★」と仮定します。 連結された分類用のコンボボックス名を「cbx1」 名称用コンボボックス名を「cbx2」と仮定します。 「cbx1」の設定 値集合ソース: SELECT DISTINCT 分類 FROM ★★; 値集合タイプ: テーブル/クエリ 連結列: 1 列数: 1 入力チェック: はい 「cbx2」の設定 値集合ソース: SELECT 名称, 分類 FROM ★★ WHERE IIf([cbx1] Is Null,True,分類=[cbx1]); 値集合タイプ: テーブル/クエリ 連結列: 1 列数: 2 列幅: 2cm;0cm (名称だけ表示する様に) 入力チェック: はい VBA で以下の処理を記述します Private Sub cbx1_AfterUpdate() Me.cbx2 = Null Me.cbx2.SetFocus End Sub Private Sub cbx2_Enter() Me.cbx2.Requery End Sub Private Sub cbx2_AfterUpdate() If (Not IsNull(Me.cbx2)) Then If (IsNull(Me.cbx1)) Then Me.cbx1 = Me.cbx2.Column(1) Me.cbx2.Requery End If End If End Sub ※ 分類のコンボが更新されたら、名称用コンボにフォーカス移動 ※ 名称用コンボのフォーカス取得時に、自分を再クエリ ※ 名称用コンボの更新で、選ばれていたら 分類が設定されていなかったら、選ばれた名称の分類を設定 そして、分類に絞った表示にするために自分を再クエリ ※ 後は検証しながら細かいイベントでの動きを入れていきます 例えば、上記状態で 分類を選択し、名称を選択中に ESC キーとかで取消した けど、名称(cbx2)からフォーカスが外れていないので 名称の一覧は前回選択した分類でのものになっていたり・・・ ※ 全ケースに対応できるレベルで回答しているわけではないので・・・ この場合は、フォームの Undo で、cbx2 からフォーカスを外す事で対応できますが ※※ 「cbx2」の様に「cbx1」の条件で表示を切り替える場合、 コントロールを重ねたりしますが、今回の場合は上記で動くようですね。 ※ 帳票フォームでのお話だった?(帳票フォームで確認していたもので) もし上記で動かなかったり・・・ 以前に、コントロールを重ねる、このさわりの回答をしていたので そちらを参照してみてください accessの連結コンボについて http://okwave.jp/qa/q7345694.html #4の回答
その他の回答 (1)
- NotFound404
- ベストアンサー率70% (288/408)
テーブルの名前を「テーブル1」としてある場合。 フォームのデザインビューでコンボボックスを配置します。 プロパティのその他タブで名前を「コンボ1」にします。 データタブで値集合ソースに select 分類 from テーブル1 group by 分類; 連結列には 1 を。 コンボボックスをもう一個配置し名前をコンボ2とします。 こちらの値集合ソースには select 名称 from テーブル1 where 名称='[コンボ1]' ; フォームビューに切り替えて コンボ1で何かを選択後に、F9 キーを押します。 その後コンボ2でコンボ1で選択したものから選べます。 F9 キーを毎回押すのも面倒なので VBAではコンボ1の更新後処理に記述します。 Private Sub コンボ1_AfterUpdate() Me!コンボ2.Requery End Sub 単純な例ですが実際にはもっと複雑な場合があるでしょう。 Access コンボボックスの連動 などをキーワードでGoogleってみてください。
お礼
早々の回答ありがとうございます。 やってみます。
お礼
ありがとうございます。 思い通りに動きました。