ACCESSでのフォームZのコンボボックスB初期値が表示されない問題について

このQ&Aのポイント
  • ACCESSでフォームZ内のコンボボックスAで選択した値を元にコンボボックスBの値を絞りたいです。また、変更した値がフォームZを開いた時に表示されるようにしたいです。
  • 現在、フォームZは商品テーブルの各項目に値を読み込ませています。コンボボックスAは部門テーブルの区分を、コンボボックスBは詳細テーブルの保障を表示させるようにしたいです。
  • ただし、現在の設定ではコンボボックスBの初期値が反映されずに表示されません。どのように設定すればよいでしょうか。
回答を見る
  • ベストアンサー

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 どなたかご教示頂けないでしょうか。 宜しくお願い致します。

  • t_omu
  • お礼率45% (5/11)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.7

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

t_omu
質問者

お礼

何とか出来ました! コンボボックスAの更新後処理でコンボボックスBのリストを対象の分だけ作成し、コンボボックスBは コントロールソース → なし 値集合タイプ → 値リスト 値集合ソース → なし 更新後処理にMe.Refresh 多分、Me.Refreshは無くても大丈夫だと思いますが。 大変お世話になりました! 一連でご回答頂いているので、最後のこちらをベストアンサーにします。 ありがとうございました!

その他の回答 (7)

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.8

> 、「[Forms]![フォームZ]![コンボボックスA]」の所でどうしてもパラメータの入力を求められてしまいます。 それはフォームやコンボボックスの名前が違うという事だと思いますよ。 全角半角や大文字小文字(Zとzとか)を調べてください。全角半角や大文字小文字の違いは2013だと自動で直されますが。

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.6

Private Sub コンボボックスA_AfterUpdate()  Me!コンボボックスB = ""  Me!コンボボックスB.Requery End Sub にしてみてください。 Me!コンボボックスB = "" で、前回のコンボボックスBの選択をクリアします。 Me!コンボボックスB.Requery で、回答No1のコンボボックスBの値集合ソースで設定しているクエリを再度実行し、コンボボックスAの選択肢と連携してコンボボックスBの選択肢を絞り込みます。

t_omu
質問者

お礼

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

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.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)とかは適宜変更してください。

t_omu
質問者

お礼

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

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.4

Me!コンボボックスA.Requery ↓ Me!コンボボックスB.Requery です。私の説明が不十分だったみたいです。

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.3

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

t_omu
質問者

お礼

ご返信、ありがとうございます。 いろいろ問題があり過ぎてどこがクリティカルなのか全然分かりません…。 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)しか取得できていません…。

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.2

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

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.1

コンボボックスBの値集合ソースを SELECT 詳細テーブル.保障, 詳細テーブル.金額, 詳細テーブル.[No] FROM 振分テーブル INNER JOIN 詳細テーブル ON 振分テーブル.[No] = 詳細テーブル.[No] WHERE (((振分テーブル.区分)=[Forms]![フォームZ]![コンボボックスA])); にして、コンボボックスAの更新後処理のマクロで再クエリーと値の代入(メニュータブですべてのアクションを表示)でコンボボックスBをNULLにしてください。

t_omu
質問者

お礼

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

関連するQ&A

  • accessのコンボボックスのことで質問です。

    accessを勉強しているのですが、ちょっとしたことで分からなくなってしまいました・・。 質問の内容なのですが、まずフォーム上にコンボボックスAとコンボボックスBを配置するとします。 レコードソースには仮に[情報テーブル]というテーブルが選択されているとします。 コンボボックスAには[情報テーブル]のフィールド名が、 例えば[顧客NO]、[商品]、[値段]というフィールド名が入っているとし、フィールドにはそれぞれ10件ずつデータが入力されています。 そしてコンボボックスAで[顧客NO]を選択するとコンボボックスBに[顧客NO]の10件のデータが挿入され、選択できるようにしたいのです。 他のフィールド名を選んだときにも同じようにコンボボックスBにフィールドのデータが入るようにしたいと思っています。 コンボボックスAにテーブル名を入れることはできたのですが、 コンボボックスAで選択されたフィールドのデータを、コンボボックスBで選択できるようにするというやり方がわからないのです・・。 accessは2002を使っています。 よろしくお願いします。

  • Access フォームのコンボボックスでの検索

    Access2010で質問です。 フォーム上のコンボボックスで レコードを検索・抽出したいと考えています。 以下のような事をやりたい場合、 フォームやVBAをどのように 作ればよろしいのでしょうか? お忙しいところたいへん恐れ入りますが、 ご教授いただけますと助かります。 ======テーブルの説明===== 以下の3つのテーブルがあります。 ◆メインテーブル |No|職業 |住所|年齢|名前| -------------------------- |01|会社員|東京| 31|品川| |02|自営業|埼玉| 30|川口| |03|会社員|東京| 30|渋谷| |04|自営業|埼玉| 20|戸田| |05|自営業|埼玉| 20|熊谷| |06|自営業|東京| 30|太田| ◆職業テーブル |No|職名 | ----------- |01|自営業| |02|会社員| |03|無職 | ◆住所テーブル |No|地名| --------- |01|東京| |02|埼玉| |03|千葉| そして、各テーブルは 以下のようにリレーションされています。 ・職業テーブルはメインテーブルの「職業」へリレーション ・住所テーブルはメインテーブルの「住所」へリレーション =====検索方法の説明===== 検索はフォーム上で行いたいです。 フォームに以下のようなコンボボックスを2つ作成します。  コンボボックス1・・・職業が選べます  コンボボックス2・・・住所が選べます それぞれのコンボボックスで条件を選んだ後、 「実行」ボタンを押すことで検索結果を表示させたいです。 ◆両方のコンボボックスが空欄だった場合 「検索条件を選んでください」との メッセージボックスを表示させたいです。 ◆複数のレコードが抽出された場合にやりたい事 各レコードの「年齢」を比較して 値が一番小さいレコードだけが 抽出されるようにしたいです。 「年齢」が同じ値だった場合(競合した場合)は 「No」の値が小さいレコードを抽出したいです。 ◆検索結果の表示方法 抽出されたレコードの「名前」だけを フォームに表示したいです。 =====検索結果の例(やりたい事)===== ◆事例1 コンボボックス1=「会社員」 コンボボックス2=「東京」 検索結果=「渋谷」 01と03が検索にヒットしますが 「年齢」の値が小さい方(03)だけを 抽出されるようにしたいです。 ◆事例2 コンボボックス=「自営業」 コンボボックス=「埼玉」 検索結果=「戸田」 まず02と04と05が検索にヒットしますが 02の「年齢」の値が大きいので除外します。 次に04と05の「年齢」の比較ですが、 同じ値になっています。 したがって「No」の値が小さい04が 抽出されるようにしたいです。 ==================== 以上です。 できるだけ詳細に書いたつもりですが、 不足な情報がありましたらご指摘ください。 なにとぞよろしくお願いいたします。

  • ACCESS2013 コンボボックスの警告について

    (1)コンボボックスに一度値を入力及び選択をして確定する。 (2)再度(1)のコンボボックスの内容を削除して空欄の状態に戻す。 (3)他のフィールド等にカーソル等を移すと、(2)のコンボボックスに対して警告メッセージが出でしまう。 'xxxxトランザクション.xxxxカラム'フィールドに値を入力してください。 上記(3)の警告メッセージが出ないようにしたいのですが どのように対応すればよろしいでしょうか? ※フォームはxxxxトランザクションがデータソース(ダイナセット)になっています。 ※コンボボックスはxxxxマスタテーブルが値集合(テーブル/クエリ)となっています。

  • アクセスVBAについて

    アクセスのフォームで「所属」というコントロールボックスが「1」のときは「テーブル 1」の値をコンボボックスで参照し、「所属」が「2」のときは「テーブル 2」の値を参照したいのですが、確か、「select case」を使ったと思うのですが、教えてください。

  • アクセスのVBAなんですけど

    アクセスのVBAでフォームからフォームへ値を渡すことはできますか?具体的にいうとあるフォームでコンボボックスから選択し、OKボタンで次のフォームを開くのですが、初めのコンボボックス(ちなみに5つ選択項目があります)で選んだ条件でフォームの表示内容を変更させようと思っています。 今のところ、選択した項目を一時的にテーブルに保存して、新しいフォームが開くときにテーブルから値を取得してやるのか・・・・と考えているのですが、まどろっこしいので・・・・・よろしくお願いします。

  • ACCESS2000 コンボボックス絞込み

    こんにちは。以前に同じ質問をしたのですが、分からなかったので再度質問させて頂きます。 フォームでコンボボックスで入力しているのでが、 1つ目で選択したら2つ目のコンボボックスに1と関連するデーターしか表示しないようにしたいのですが・・。 テーブル 売上区分1  売上区分1ID  オートナンバー  売上区分1   テキスト型 テーブル 売上区分2  売上区分2ID  オートナンバー  売上区分1   数値  売上区分2   テクスト型 ファームの表示はそれぞれ、区分名が表示されるようになってます。 コンボ1で選んだのが、商品区分1IDが1ならコンボ2で表示されるのが、テーブル 売上区分2 の 売上区分1が1のものだけ表示できるようにしたいです。 説明が悪いかもしれませんが、お願いします。 初心者なもので、分かりやすく書いていただければありがたいです。お願いします。  

  • Access コンボボックスの次の値に移動

    Microsoft Accessでフォームを作りました。コンボボックス1の値はテーブル1から参照するようになっています。このフォームにボタンを追加して、ボタンを押すとコンボボックスの値が一つ下の値に移動するようにしたいです。どんなコードを書けば良いですか。

  • 【Access】コンボボックスの値の変更方法

    フォームにコンボボックスを配置し、下記の動作をさせたいと思ったのですが、1は出来たものの2が出来ませんでした(値集合ソースの中身は表示されるものの、選択してもコンボボックスに反映されませんでした)。 1. フォームオープン・・・データベースのcmb1の値より、対応する文字をコンボボックスに表示する。 2. コンボボックスの値の変更・・・プルダウンから値集合ソースに表示されている任意の値を選択し、コンボボックスに設定する。 その為、どうすれば値を変更できるようになるかアドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、初期状態から下記を変更しております。 【テーブル】 テーブル名:tbl フィールド名:ID,cmb1 値:1,2 【フォーム】 フォーム名:form1(コンボボックスを一つ配置) フォームのレコードソース:SELECT Choose(tbl.cmb1,"A","B","C") AS nm_cmb FROM tbl WHERE (((tbl.ID)=1)); コンボボックス 列数:2 列幅:0cm;3cm コントロールソース:nm_cmb 値集合タイプ:値リスト 値集合ソース:1;A;2;B;3;C 連結列:2 上記の状態で起動時のコンボボックスの中身は"B"と表示されるものの、コンボボックスのプルダウンメニューを表示して値を変更しようとしても出来ない事が確認できると思います。 以上、よろしくお願いします。

  • アクセスでのリスト表示について。

    アクセス初心者です。フォームのコンボボックスにテキストボックスをつけて、コンボボックスには担当者コードテキストボックスには=cmb_担当者.column(1)等と書いて、担当者名をcolumnで表示するのは可能ですよね。リストボックスの中で一覧表を作成したのですが、今は数値ばかりが見えていて、訳が分かりません。テーブルへのデータはほとんど数値で入っていくようにしています。columnが使えたら、テキストでも表示されるので見やすくなると思うのですが、クエリでのcolumnの作成は可能なのでしょうか?

  • Access コンボボックスの複数選択

    Access2007を勉強中の初心者です。 「空白のフォーム」から作成したコンボボックスで、複数選択が可能になるような設定はありませんか? テーブル項目の「ルックアップ」「複数の値を許可」を許したテーブルから作成したフォームでは、コンボボックスで複数の値を選択可能になりますが、「空白のフォーム」から作成した場合にはできないのでしょうか。 リストボックスではスペースをとってしまう為、コンボボックスで行いたいです。 言葉足らずな内容かもしれませんし、大変お手数をおかけしますが、よろしくお願いいたします。

専門家に質問してみよう