Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


778 / 2272 ツリー ←次へ | 前へ→

【10151】コンボボックスについて mai 08/1/18(金) 22:18 質問[未読]
【10152】Re:コンボボックスについて VBWASURETA 08/1/20(日) 21:15 回答[未読]
【10153】Re:コンボボックスについて mai 08/1/20(日) 23:24 質問[未読]
【10154】Re:コンボボックスについて VBWASURETA 08/1/21(月) 9:11 回答[未読]
【10155】Re:コンボボックスについて VBWASURETA 08/1/21(月) 13:52 発言[未読]
【10167】Re:コンボボックスについて mai 08/1/23(水) 15:44 質問[未読]
【10168】Re:コンボボックスについて VBWASURETA 08/1/23(水) 16:48 回答[未読]
【10156】Re:コンボボックスについて mai 08/1/22(火) 10:48 質問[未読]
【10157】Re:コンボボックスについて VBWASURETA 08/1/22(火) 11:32 回答[未読]
【10158】Re:コンボボックスについて VBWASURETA 08/1/22(火) 11:42 発言[未読]

【10151】コンボボックスについて
質問  mai E-MAIL  - 08/1/18(金) 22:18 -

引用なし
パスワード
   アクセス初心者な私です。
今、どうしても分からないことがあります。

テーブルで4つリストを作りました。
1.照明
 家具
 電化製品

2.スタンド
 間接照明
 スポットライト

3.ベッド
 テーブル
 デスク

4.レンジ
 冷蔵庫
 洗濯機

上のような4つのテーブルを作り、
フォームで入力画面を作成しました、
そのときに、コンボボックスを使って入力させるのですが、
例えば、1.のリストで、家具を選んで入力すると、次のフィールドでのコンボボックスでは、3.のリストが…、もし「照明」を選んだら2.のリストが出て選べれるようにしたいのですが、どのようにしたらよいのでしょうか?

初歩的な質問で申し訳ないのですが、どうかご回答よろしくおねがいします

【10152】Re:コンボボックスについて
回答  VBWASURETA  - 08/1/20(日) 21:15 -

引用なし
パスワード
   ▼mai さん:

こんばんは。

まず、テーブルの紐付け方から覚えた方が良いです。
データベース正規化で調べると良いと思います。


例えば:

テーブルA
−−−−−−−−−−
商品分類|アイテム名
−−−−−−−−−−
01   |照明
02   |家具
03   |電化製品


テーブルB
−−−−−−−−−−−−
商品分類|製品名
−−−−−−−−−−−−
01   |スタンド
01   |間接照明
01   |スポットライト


テーブルC
−−−−−−−−−−−−
商品分類|製品名
−−−−−−−−−−−−
02   |ベッド
02   |テーブル
02   |デスク


テーブルD
−−−−−−−−−−−−
商品分類|製品名
−−−−−−−−−−−−
03   |レンジ
03   |冷蔵庫
03   |洗濯機


ようなテーブルを用意します。
見てわかるかと思いますが、紐付けるフィールド
つまり商品分類が必要になります。
但し、コンボボックスと紐付ける場合に
フィールドが複数になるのでちょっと
VBAを覚えないと厳しいと思います。


ただ、もっとわかりやすいのは以下のような構成が
望ましいかも知れません。


分類マスタテーブル
−−−−−−−−−−
商品分類|アイテム名
−−−−−−−−−−
01   |照明
02   |家具
03   |電化製品


商品テーブル
−−−−−−−−−−−−−−−−
商品分類|商品CD|製品名
−−−−−−−−−−−−−−−−
01   |1−1|スタンド
01   |1−2|間接照明
01   |1−3|スポットライト
02   |2−1|ベッド
02   |2−2|テーブル
02   |2−3|デスク
03   |3−1|レンジ
03   |3−2|冷蔵庫
03   |3−3|洗濯機


のような感じのテーブルにすると、コンボボックスの
値集合ソースに以下の内容を入れるだけで切り替えられます。


SELECT [商品テーブル].[製品名] FROM 分類マスタ INNER JOIN 商品テーブル ON [分類マスタ].[商品分類]=[商品テーブル].[商品分類] WHERE ([分類マスタ].[アイテム名])=[Forms]![フォーム名]![コンボ名]);


但し分類のコンボボックス切り替えタイミングで
DoCmd.Requery [Forms]![フォーム名]![分類コンボ名]
が必要になります。

【10153】Re:コンボボックスについて
質問  mai E-MAIL  - 08/1/20(日) 23:24 -

引用なし
パスワード
   ▼VBWASURETA さん:
ご回答して頂き本当にありがとうございます。
助かりました。

ところで、一つどうしても分からないのが下記の文章です。

コンボボックスの切り替えタイミング?とはどういう意味なのでしょうか?
どうしても、いまいち理解が出来なくて悩んでます。
本当にどうしようもない初心者でごめんなさい・・・
よろしければ、詳しく教えていただきたいのですが・・・
よろしくお願いします。
>
>但し分類のコンボボックス切り替えタイミングで
>DoCmd.Requery [Forms]![フォーム名]![分類コンボ名]
>が必要になります。

【10154】Re:コンボボックスについて
回答  VBWASURETA  - 08/1/21(月) 9:11 -

引用なし
パスワード
   ▼mai さん:


こんにちは。

>コンボボックスの切り替えタイミング?とはどういう意味なのでしょうか?
ですが、DoCmd.Requery は再クエリーといって再度クエリーを更新するという
処理を意味してます。
この時点で気づくかも知れませんが、
コンボボックスのリストはクエリーですから更新をかけないと
リストの内容が変わらないということです。
なので、最初のコンボボックス(分類)の内容が変わると
次のコンボボックス(製品)のリスト内容が
変わらないとダメですよね?
そいうことです。

【10155】Re:コンボボックスについて
発言  VBWASURETA  - 08/1/21(月) 13:52 -

引用なし
パスワード
   ▼mai さん:

補足です。

コンボボックスの切り替えタイミングのイベントはフォーカス喪失時の
イベントに当たります。
そのイベント内に

DoCmd.Requery forms![フォーム名]![コンボボックス名]

入れることで、該当のコンボボックスに割り当てられている
クエリー(SQL)が更新されてコンボボックスのリストが更新されます。

【10156】Re:コンボボックスについて
質問  mai E-MAIL  - 08/1/22(火) 10:48 -

引用なし
パスワード
   ▼VBWASURETA さん:

こんにちは!
新たに、VBWASURETA さんに教えていただいたように、テーブルを作成し、

>SELECT [商品テーブル].[製品名] FROM 分類マスタ INNER JOIN 商品テーブル ON [分類マスタ].[商品分類]=[商品テーブル].[商品分類] WHERE ([分類マスタ].[アイテム名])=[Forms]![フォーム名]![コンボ名]);

と値集合ソースに入力してみても、何度やっても、不正”となってしまいます。

 ●FROM 分類マスタ INNER JOIN 商品テーブル ON の部分は
 
  [分類マスタテーブル] INNER JOIN [商品テーブル] ON とカッコをつける必要はないのでしょうか? 

値集合ソ−スに入力するときは、
プロパティの「値集合ソース」ところに直接入力すればいいのですよね!??

いまいち理解できてなくてすみません・・・


何度もすみません・・・

悩んでます。


>商品テーブル
>−−−−−−−−−−−−−−−−
>商品分類|商品CD|製品名
>−−−−−−−−−−−−−−−−
>01   |1−1|スタンド
>01   |1−2|間接照明
>01   |1−3|スポットライト
>02   |2−1|ベッド
>02   |2−2|テーブル
>02   |2−3|デスク
>03   |3−1|レンジ
>03   |3−2|冷蔵庫
>03   |3−3|洗濯機
>
>

【10157】Re:コンボボックスについて
回答  VBWASURETA  - 08/1/22(火) 11:32 -

引用なし
パスワード
   ▼mai さん:

こんにちは。

あ、すみませんサンプルに間違いがあります。


>>SELECT [商品テーブル].[製品名] FROM 分類マスタ INNER JOIN 商品テーブル ON [分類マスタ].[商品分類]=[商品テーブル].[商品分類] WHERE ([分類マスタ].[アイテム名])=[Forms]![フォーム名]![コンボ名]);

ですが、

SELECT [商品テーブル].[製品名] FROM 分類マスタ INNER JOIN 商品テーブル ON [分類マスタ].[商品分類]=[商品テーブル].[商品分類] WHERE ([分類マスタ].[アイテム名]=[Forms]![フォーム名]![コンボ名]);

です。


多分ですが、カッコに対してのエラーではなかったでしょうか?

WHERE ([分類マスタ].[アイテム名])=[Forms]![フォーム名]![コンボ名]);



([分類マスタ].[アイテム名])

後ろに")"が一つ多かったです。


>  [分類マスタテーブル] INNER JOIN [商品テーブル] ON とカッコをつける必要はないのでしょうか? 

本来はつけますが、どちらでも良いはずです^^;


>値集合ソ−スに入力するときは、
>プロパティの「値集合ソース」ところに直接入力すればいいのですよね!??

はい。そのプロパティに直接入れることでクエリーと同じ意味になります。
もしくは、クエリーを作ってそのクエリー名を入れても良いです。

もしこれでもエラーが出るようでしたら、分類マスタテーブルの構成も
書いて貰って宜しいでしょうか?

【10158】Re:コンボボックスについて
発言  VBWASURETA  - 08/1/22(火) 11:42 -

引用なし
パスワード
   ▼mai さん:

追記です。

分類マスタテーブル
−−−−−−−−−−
商品分類|アイテム名
−−−−−−−−−−
01   |照明
02   |家具
03   |電化製品


ですが、テーブルの名前は「分類マスタ」です。
テーブルはテーブルである意味で書いてました。
このあたりは理解されているようなので大丈夫と思いますが
念のために記載します。

【10167】Re:コンボボックスについて
質問  mai  - 08/1/23(水) 15:44 -

引用なし
パスワード
   ▼VBWASURETA さん:

どうしても、できなかったので、
とりあえず、例の通りにテーブルなどそのまま作成してやってみました。
たぶん、値集合ソースの式はうまくいったようなのです。

ちなみに、
フォームの名は『入力』
1.番目に選択するコンボボックスの名は、『アイテム名』
2.番目に選択するコンボボックスの名は、『製品名』です

コンボボックスの切り替えの件ですが、
コンボボックス『製品名』のプロパティ(フォーカス喪失時)に

DoCmd.Requery forms![入力]![アイテム名]

と入力したのですが、

『’DoComd' マクロを見つけることができません』
と表示されてしまいます。

どうしてでしょうか?

何度もすみません・・・

【10168】Re:コンボボックスについて
回答  VBWASURETA  - 08/1/23(水) 16:48 -

引用なし
パスワード
   ▼mai さん:

こんにちは。

すみません。サンプルが悪かったみたいで

>DoCmd.Requery forms![入力]![アイテム名]



DoCmd.Requery forms![入力]![製品名].Name

です。


後、下記のエラーですが、エラー内容は正しいでしょうか?
合っているのでしたら、「DoComd」ではなく「DoCmd」ですね。

>『’DoComd' マクロを見つけることができません』

778 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free