こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESSで質問です

ACCESSで質問です。

利用するのは
 フォームZ
 フォームZ内にコンボボックスA、コンボボックスB
 商品テーブル
 部門テーブル
 振分テーブル
 詳細テーブル
になります。

やりたいこと
(1)コンボボックスA、コンボボックスBがあるフォームZで、コンボボックスAで選択した値を元にコンボボックスBの値を絞りたいです。
(2)変更した値がフォームZを開いた時に表示されるようにしたいです。

現在の設定
フォームZはデータを更新する画面で、コントロールソースで商品テーブルの各項目に値を読み込ませています。
この時、コンボボックスAは商品テーブルに登録済みの部門テーブルの区分を、
コンボボックスBは商品テーブルに登録済みの詳細テーブルの保障を表示させるようにしたいです。

現在うまくいかない点
コンボボックスBに登録済みの初期値が反映されません。

各テーブルの中身は以下の様な感じで、部門テーブルのIDが振分テーブルのIDとリンクし、
振分テーブルのNoが詳細テーブルのNoとリンクしています。
部門テーブル(コンボボックスA)
 ID(1カラム目):区分(2カラム目)
 1:テーブル
 2:チェア
 3:ソファ
 4:テレビ台
 5:本棚

振分テーブル
 ID(1カラム目):区分(2カラム目):保障(3カラム目):No(4カラム目)
 1:テーブル:1年:1
 1:テーブル:2年:2
 1:テーブル:3年:3
 1:テーブル:5年:4
 1:テーブル:10年:5
 2:チェア:1年:1
 2:チェア:2年:2
 2:チェア:3年:3
 2:チェア:5年:4
 2:チェア:10年:5
 3:ソファ:1年:1
 3:ソファ:2年:2
 3:ソファ:3年:3
 4:テレビ台:1年:1
 4:テレビ台:3年:3
 4:テレビ台:5年:4
 5:本棚:1年:1
 5:本棚:5年:4
 5:本棚:10年:5

詳細テーブル(コンボボックスB)
 No(1カラム目):保障(2カラム目):金額(3カラム目)
 1:1年:10,000
 2:2年:19,000
 3:3年:24,000
 4:5年:35,000
 5:10年:50,000

コンボボックスA
 コントロールソース:区分
 値集合タイプ:テーブル/クエリ
 値集合ソース:SELECT 区分,ID FROM 部門テーブル
 列数:2
 列幅:2;0

コンボボックスB
 コントロールソース:保障
 値集合タイプ:テーブル/クエリ
 値集合ソース:SELECT 保障,金額,No FROM 詳細テーブル
 列数:3
 列幅:1;3;0

どなたかご教示頂けないでしょうか。
宜しくお願い致します。

投稿日時 - 2019-11-17 12:57:09

QNo.9679942

困ってます

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

No5のMe.Refreshで取得できた場合(コントロールの内容が変更された場合)コントロールの名前がプロシージャで指定している名前と違う可能性があります。
コントロースソースはオプション料金だけどコントロールの名前がオプション料金 ではない場合とかです。

投稿日時 - 2019-11-18 10:47:29

お礼

何とか出来ました!
コンボボックスAの更新後処理でコンボボックスBのリストを対象の分だけ作成し、コンボボックスBは
コントロールソース → なし
値集合タイプ → 値リスト
値集合ソース → なし
更新後処理にMe.Refresh
多分、Me.Refreshは無くても大丈夫だと思いますが。

大変お世話になりました!
一連でご回答頂いているので、最後のこちらをベストアンサーにします。
ありがとうございました!

投稿日時 - 2019-11-18 14:25:12

ANo.7

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

> 、「[Forms]![フォームZ]![コンボボックスA]」の所でどうしてもパラメータの入力を求められてしまいます。

それはフォームやコンボボックスの名前が違うという事だと思いますよ。
全角半角や大文字小文字(Zとzとか)を調べてください。全角半角や大文字小文字の違いは2013だと自動で直されますが。

投稿日時 - 2019-11-18 14:22:12

ANo.6

Private Sub コンボボックスA_AfterUpdate()
 Me!コンボボックスB = ""
 Me!コンボボックスB.Requery
End Sub
にしてみてください。

Me!コンボボックスB = ""
で、前回のコンボボックスBの選択をクリアします。

Me!コンボボックスB.Requery
で、回答No1のコンボボックスBの値集合ソースで設定しているクエリを再度実行し、コンボボックスAの選択肢と連携してコンボボックスBの選択肢を絞り込みます。

投稿日時 - 2019-11-17 22:34:08

お礼

何度もありがとうございます!

しかし、コンボボックスAのIDが取得できず、「[Forms]![フォームZ]![コンボボックスA]」の所でどうしてもパラメータの入力を求められてしまいます。
複数列あるから指定しないといけないのかな?とも思い、一旦「[Forms]![フォームZ]![コンボボックスA].Column(0)」と定義しましたが、今度は関数エラーが出てしまいました…。

投稿日時 - 2019-11-18 13:37:47

ANo.5

> Me!コンボボックスB.Column(1)しか取得できていません…。

Private Sub コンボボックスB_AfterUpdate()
Me!No = Me!コンボボックスB.Column(2)
Me!オプション料金 = Me!コンボボックスB.Column(1)
Me.Refresh
End Sub

といった感じでMe.Refreshを入れてみてください。
Column(2)とかは適宜変更してください。

投稿日時 - 2019-11-17 21:11:03

お礼

何度もありがとうございます!
一つ前のご回答ですが、
Private Sub コンボボックスA_AfterUpdate()
 Me!コンボボックスA.Requery
 Me!コンボボックスB.Requery
End Sub
で合っていますでしょうか。
これ+上記回答のものを試そうと思います…が、そろそろ帰らないと寝る時間がまた1時間とかになりそうなので、明日試そうと思います。

投稿日時 - 2019-11-17 21:19:11

ANo.4

Me!コンボボックスA.Requery

Me!コンボボックスB.Requery

です。私の説明が不十分だったみたいです。

投稿日時 - 2019-11-17 21:00:31

ANo.3

> しかし、残念ながらコンボボックスBで値が取得できませんでした。

質問に記載されているのと同じ状態のものを作成してうまくいったのですが…
質問に記載されていない部分で何か違う事が起きているのか、コンボボックスBの再クエリがうまくいっていないのかもしれませんね。

投稿日時 - 2019-11-17 19:53:01

お礼

ご返信、ありがとうございます。
いろいろ問題があり過ぎてどこがクリティカルなのか全然分かりません…。
Private Sub コンボボックスA_AfterUpdate()
 Me!コンボボックスB = ""
 Me!コンボボックスA.Requery
End Sub
をやったんですが、うまくいきませんでした。
無理矢理埋め込んだコンボボックスBも、その後2列目移行の値を取得しようとして
Private Sub コンボボックスB_AfterUpdate()
Me!No = Me!コンボボックスB.Column(1)
Me!オプション料金 = Me!コンボボックスB.Column(3)
End Sub
をやっているのですが、これもうまくいかず、Me!コンボボックスB.Column(1)しか取得できていません…。

投稿日時 - 2019-11-17 20:35:21

ANo.2

No1は半角英数を全角にしています(なぜか半角英数だと回答ができない)ので半角英数に直して利用してください。

投稿日時 - 2019-11-17 16:59:24

ANo.1

コンボボックスBの値集合ソースを

SELECT 詳細テーブル.保障, 詳細テーブル.金額, 詳細テーブル.[No] FROM 振分テーブル INNER JOIN 詳細テーブル ON 振分テーブル.[No] = 詳細テーブル.[No] WHERE (((振分テーブル.区分)=[Forms]![フォームZ]![コンボボックスA]));

にして、コンボボックスAの更新後処理のマクロで再クエリーと値の代入(メニュータブですべてのアクションを表示)でコンボボックスBをNULLにしてください。

投稿日時 - 2019-11-17 16:56:33

お礼

ご回答、ありがとうございます。
しかし、残念ながらコンボボックスBで値が取得できませんでした。
どうにも動かないので、コンボボックスAの更新後処理にIF文などで無理矢理値を決めて、「コンボボックスAを選択後にコンボボックスBを選択する」と言う運用回避をしました。
もう少し時間がある時に原因を追ってみます。

投稿日時 - 2019-11-17 19:25:27

あなたにオススメの質問