プロが教える店舗&オフィスのセキュリティ対策術

仕入入力画面なんですが
メインフォーム(仕入伝票テーブル)サブフォーム(仕入伝票明細テーブル)
という構成です。

メインフォームで
仕入先をコンボボックスで指定すると

サブフォームの
商品を入力するコンボボックスに
メインフォームで選択した仕入先で購入できる商品が選べるように
したいのですが、どうすればよろしいでしょうか?

メインフォームの仕入先コンボボックスを選択する度に
サブフォームの商品コンボボックスで選択できる内容を反映させたい
です。

仕入先A : 商品1 商品2
仕入先B : 商品3 商品4 商品5
仕入先C : 商品6 商品7 商品8 商品9

メインフォームで仕入先コンボボックスで仕入先Aを選択すると
サブフォームで選択できる商品コンボボックスは商品1と商品2

メインフォームで仕入先コンボボックスで仕入先Bを選択すると
サブフォームで選択できる商品コンボボックスは商品3と商品4と商品5

というようなイメージで作りたいです。

どうかよろしくお願いします。

A 回答 (3件)

仕入先フィールドのあるテーブル名と


商品フィールドのあるテーブル名 & デザインはどうなっていますか?

仮に仕入先マスタ
ID、仕入先名、電話・・・

商品マスタ
ID、仕入先ID、商品名、・・・
みたいな感じだと

メインフォームのコンボボックスは非連結コントロールにして
プロパティのデータタブの
コントロールソース→空白
値集合タイプ→テーブル/クエリ
値集合タイプ→select ID,仕入先名 from 仕入先マスタ
連結列→1

書式タブ
列数→2
列幅→0.5;2 (適当に)
あとは
イベントタブ
更新後処理をクリックすると下向き▼・・・
が出ますので三点リーダみたいなほうをクリック
VBEのウィンドウが出ますので、そこに
Private Sub 実際のコンボボックス名_AfterUpdate()
Me.Recalc '←この一行を入れます
End Sub

つぎにサブフォームのほうのコンボボックスには
プロパティのデータタブの
コントロールソース→空白
値集合タイプ→テーブル/クエリ
値集合タイプ→select 商品名 from 商品マスタ where 仕入先ID = forms!メインフォーム名!先のコンボボックス名
連結列→1

で出来るかな?
まずはここまで。
PS.
仕入先と商品のテーブルの構造を提示してもらう必要があるような。

この回答への補足

nicotinism 様
回答ありがとうございます。

やはり、うまくいきません。


仕入先マスタ
仕入先ID  数値型
仕入先名  テキスト型
電話・・・

商品マスタ
商品ID   数値型
商品名   テキスト型
仕入先ID  数値型
・・・

メインフォーム(仕入伝票テーブル)
仕入伝票番号  オートナンバー型
仕入伝票日付  日付型
仕入先ID   数値型※1
仕入合計金額  通貨型

サブフォーム(仕入伝票明細テーブル)
仕入伝票番号   (オートナンバー型のため
          フォームには出していない)
仕入伝票番号明細  数値型
商品ID      数値型※2
単価        通貨型
数量        数値型
金額        通貨型

という構成です。

仕入入力画面なので
仕入伝票テーブルと仕入伝票明細テーブルを同時に
入力できるようにしたいです。

教えていただいた
非連結のコンボボックスにするのでは
仕入伝票テーブルおよび仕入伝票明細テーブル
への入力ができなくなってしまいます。

連結したコンボボックスで
メインフォーム、サブフォームともに
入力処理ができるようにはできないでしょうか?

よろしくお願いします。


※1 select ID,仕入先名 from 仕入先マスタ
連結列→1

書式タブ
列数→2
列幅→0,2で仕入先名だけ表示するようにしています。

※2 select 商品ID,商品名 from 商品マスタ
連結列→1

書式タブ
列数→2
列幅→0,2で商品名だけ表示するようにしています。

補足日時:2011/01/07 15:14
    • good
    • 0

追伸


Me.Recalc '←この一行を入れます
忘れてました。
    • good
    • 0
この回答へのお礼

nicotinism 様

今朝、me.サブフォーム名ですると

思った通りの処理ができました。

本当にありがとうございます^^

お礼日時:2011/01/08 10:05

続きです。


メインフォームのコンボボックス名を仕入先コンボ
サブフォームのを商品コンボとします。

仕入先コンボ
値集合ソースを、select 仕入先ID,仕入先名 from 仕入先マスタ
に変更

商品コンボは
select 商品ID,商品名,仕入先ID from 商品マスタ where 仕入先ID = forms!メインフォーム名!仕入先コンボ

仕入先コンボの更新後イベントは
Private Sub 仕入先コンボ_AfterUpdate()
Me!仕入先ID = Me!仕入先コンボ.Column(0)
Me!仕入先コンボ = Null
End Sub

商品コンボは
Private Sub 仕入先コンボ_AfterUpdate()
Me!商品ID = Me!商品コンボ.Column(0)
Me!商品コンボ = Null
End Sub

でどうでしょうか?
サブフォームは帳票タイプ
商品コンボは詳細セクションに配置してください。

この回答への補足

nicotinism 様

回答ありがとうございます。

どうやってコードを組んでも
思ったようにいかなかった原因が
わかりました。

初歩的なミスで本当にすみません。


セキュリティーの警告で

このコンテンツを有効にする

にしないとダメなんですね。

Access2007をつい最近初めて使うもので
無知で申し訳ないです。

最初に回答してくださったANo.1の
更新後処理の

Me.Recalcで商品IDコンボボックスの値は
変わるのですが
最初に何も入力していない状態から
何かを選んで
一度更新しなければ

商品IDコンボボックスの値が変わらないという
結果になってしまいました。

ここまで来ればやっと実現したいこと
質問するべきことが明確になってきました。

メインフォームで
仕入先ID(コンボボックス)を選んで更新したタイミング

仕入先ID(コンボボックス)の更新後処理で

サブフォームの商品ID(コンボボックス)を
Recalcできれば理想です。

メインフォームの処理のところのコードで
サブフォームの処理をするようになるのですが

どう記述すればよろしいでしょうか?

Me.Recalcと記述したのでは、
Me.はメインフォームのものを示すことになるのでダメです。

サブフォームの商品IDコンボボックスをメインフォームの
仕入先IDコンボボックスで選んだ、商品の内容が選べるように
反映させる処理をするのにはどうすればよろしいでしょうか?

ご迷惑かけております。 何卒よろしくお願いします。

補足日時:2011/01/07 18:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す