Access VBA質問箱 IV

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

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


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

【3872】コンボボックスの連携がうまくいきません なべなべ 04/11/18(木) 21:37 質問[未読]
【3874】Re:コンボボックスの連携がうまくいきません クロ 04/11/19(金) 9:21 回答[未読]
【3876】Re:コンボボックスの連携がうまくいきません なべなべ 04/11/19(金) 21:58 質問[未読]
【3877】Re:コンボボックスの連携がうまくいきません クロ 04/11/19(金) 23:26 回答[未読]
【3879】Re:コンボボックスの連携がうまくいきません なべなべ 04/11/21(日) 21:13 質問[未読]
【3880】Re:コンボボックスの連携がうまくいきません クロ 04/11/22(月) 10:50 回答[未読]
【3883】Re:コンボボックスの連携がうまくいきません なべなべ 04/11/23(火) 5:43 お礼[未読]

【3872】コンボボックスの連携がうまくいきません
質問  なべなべ  - 04/11/18(木) 21:37 -

引用なし
パスワード
   Accessの初心者です。お願いします。

見積書に部署名と担当者名を入力したいと思います。
部署名を決定するとそれにひもづいた担当者名だけを入力できるようにしたいのですがやり方がよくわかりません。
2004/4/9のトピックをみたのですが、部署名が100個くらいあるものを作りたいと思っているので、100条件も入力できません。

なにか、簡単な方法はないでしょうか?

すいませんお願いします。
WindowsXp
Access2000

【3874】Re:コンボボックスの連携がうまくいきませ...
回答  クロ  - 04/11/19(金) 9:21 -

引用なし
パスワード
   2つのコンボボックスが同フォーム(仮にフォームAとします)上に
あると仮定します。

テーブル:部署マスタ
 部署ID:数値型 (主キー)
 部署名:テキスト型
 ※予めレコードを入れておくこと

テーブル:社員マスタ(担当者マスタでも可)
 社員ID:数値型(主キー)
 社員名:テキスト型
 部署ID:数値型
 ※予めレコードを入れておくこと

部署選択用コンボボックスをウィザードで作成してください。
作成後、プロパティの「名前」を「cmb部署」としてください。
同プロパティで以下を確認してください。
値集合タイプ:テーブル/クエリ
値集合ソース:部署マスタ…テーブル名です。
列数:2
連結列:1

担当者選択用コンボボックスを作成します。
ウィザードで初めに開くダイアログでキャンセルを押してください。
コンボボックスがフォーム上にできので、プロパティに...
名前:cmb担当者
値集合タイプ:テーブル/クエリ
値集合ソース:SELCT 社員ID, 社員名 FROM 社員マスタ WHERE 部署ID = Forms!フォームA!部署ID
列数:2
連結列:1
とします。
※このときフォーム上に社員名を表示したいなら非連結テキストボックスを作成し
 コントロールソースを「=cmb担当者.Column(1)」としてください。

最後に部署選択用コンボボックスのプロパティ/イベント/「更新後処理」に
Me.cmb担当者.Requery
とすればできあがりです。

【3876】Re:コンボボックスの連携がうまくいきませ...
質問  なべなべ  - 04/11/19(金) 21:58 -

引用なし
パスワード
   返信ありがとうございます。しかしながら今一歩のところでうまく行き
ませんでした。

テーブル:部署マスタ
 部署ID:数値型 (主キー)←オートナンバーにしました
 部署名:テキスト型

テーブル:社員マスタ
 社員ID:数値型(主キー)←オートナンバーにしました
 社員名:テキスト型
 部署ID:数値型 ←ルックアップウィザードで作成しました。

部署選択用コンボボックスはご指示通り作成しました。
担当者選択用コンボボックスはご指示通り作成しましたが、担当者名
が空白になったので次のように修正したところ、表示されるようには
なりました。

SELECT [社員マスタ].[社員ID], [社員マスタ].[社員名] FROM 部署マスタ INNER JOIN 社員マスタ ON [部署マスタ].[部署ID]=[社員マスタ].[部署ID] WHERE ((([部署マスタ].[部署ID])=[Forms]![フォームA]![cmb部署]));

更新後処理もご指示通り作成しました。

これで部署名を選択すると担当者名がプルダウンで表示されるようには
なったのですが、選択することができません。

あと一歩だと思うのですが、よい解決策はないものでしょうか?

あと、部署名をプルダウンした場合、オートナンバーと部署名の両方が見える
ようになり、選択するとオートナンバーが表示されます。これを部署名のみに
したいのですが、良い方法はないものでしょうか?

以上、いろいろとありますが、ご協力をよろしくお願い申し上げます。


>2つのコンボボックスが同フォーム(仮にフォームAとします)上に
>あると仮定します。
>
>テーブル:部署マスタ
> 部署ID:数値型 (主キー)
> 部署名:テキスト型
> ※予めレコードを入れておくこと
>
>テーブル:社員マスタ(担当者マスタでも可)
> 社員ID:数値型(主キー)
> 社員名:テキスト型
> 部署ID:数値型
> ※予めレコードを入れておくこと
>
>部署選択用コンボボックスをウィザードで作成してください。
>作成後、プロパティの「名前」を「cmb部署」としてください。
>同プロパティで以下を確認してください。
>値集合タイプ:テーブル/クエリ
>値集合ソース:部署マスタ…テーブル名です。
>列数:2
>連結列:1
>
>担当者選択用コンボボックスを作成します。
>ウィザードで初めに開くダイアログでキャンセルを押してください。
>コンボボックスがフォーム上にできので、プロパティに...
>名前:cmb担当者
>値集合タイプ:テーブル/クエリ
>値集合ソース:SELCT 社員ID, 社員名 FROM 社員マスタ WHERE 部署ID = Forms!フォームA!部署ID
>列数:2
>連結列:1
>とします。
>※このときフォーム上に社員名を表示したいなら非連結テキストボックスを作成し
> コントロールソースを「=cmb担当者.Column(1)」としてください。
>
>最後に部署選択用コンボボックスのプロパティ/イベント/「更新後処理」に
>Me.cmb担当者.Requery
>とすればできあがりです。

【3877】Re:コンボボックスの連携がうまくいきませ...
回答  クロ  - 04/11/19(金) 23:26 -

引用なし
パスワード
   >あと、部署名をプルダウンした場合、オートナンバーと部署名の両方が見える
>ようになり、選択するとオートナンバーが表示されます。これを部署名のみに
>したいのですが、良い方法はないものでしょうか?

では、cmb部署のプロパティで
列幅の1列目を0cmにしてください。
例) 0cm;2.54cm

注意してほしいのが、社員マスタのルックアップウィザードで作成した部署IDです。
データ型は「数値型」なのに表記はテキストになっていませんか?
これは対象となる(値集合ソース)テーブルに主キーがある場合にこのようになります。
他人に説明するときは特に注意してください。

cmb担当者のプロパティは
値集合ソースはやはり、
SELCT 社員ID, 社員名 FROM 社員マスタ WHERE 部署ID = Forms!フォームA!部署ID
で問題ないと思います。

こちらも列幅を1列目を0cmにしてください。
そうすれば担当者名がコンボ内に表示されるはずです。

ただし、両コンボともに表示されているのは部署名/担当者名ですが、実際に連結しているのは
1列目の各IDとなりますので注意してください。

【3879】Re:コンボボックスの連携がうまくいきませ...
質問  なべなべ  - 04/11/21(日) 21:13 -

引用なし
パスワード
   お世話になっております。

>では、cmb部署のプロパティで
>列幅の1列目を0cmにしてください。
>例) 0cm;2.54cm

→これはバッチリでした。ありがとうございました。


>cmb担当者のプロパティは
>値集合ソースはやはり、
>SELCT 社員ID, 社員名 FROM 社員マスタ WHERE 部署ID = Forms!フォームA!部署ID
>で問題ないと思います。

→これは見直してみましたが、ダメでした。
しかしながら、
SELECT 社員ID, 社員名 FROM 社員マスタ WHERE 部署ID = Forms!フォームA!cmb部署
と修正したらうまく行きました。フォームA上のコンボボックスの名前が「cmb
部署」としているからではないかと考えています。

あと、前回、うまく行かなかったのは「=cmb担当者.Column(1)」を新規テキスト
ボックスではなく、担当者選択用コンボボックスに入力していたことが原因と思
います。ご迷惑をおかけしました。

これらの結果を踏まえ、見積もり書に入力できるよう作成しているのですが、
入力はできるのですが、新規レコードに今までと違う部署名を選択すると
今までの担当者名が見えなくなってしまいます。
(例えば、「営業1課 佐藤」を作成したレコードの次に、「営業2課 鈴木」を
入力すると、「営業1課 佐藤」→「営業1課    」となってしまいます)。
見積もり書のテーブルには「営業1課 佐藤」の記録は残っているので、フォーム
上での表示の問題だと思うのですが、よい解決策はないものでしょうか?

これが解決できれば、終わりだと思っています。

以上、ご多忙中とは存じますがご回答をお願いします。

【3880】Re:コンボボックスの連携がうまくいきませ...
回答  クロ  - 04/11/22(月) 10:50 -

引用なし
パスワード
   >SELECT 社員ID, 社員名 FROM 社員マスタ WHERE 部署ID = Forms!フォームA!cmb部署
>と修正したらうまく行きました。フォームA上のコンボボックスの名前が「cmb
>部署」としているからではないかと考えています。

仰るとおりです。申し訳ないm(__)m
しかも、SELECT のスペル間違えているし...(鬱

>これらの結果を踏まえ、見積もり書に入力できるよう作成しているのですが、
>入力はできるのですが、新規レコードに今までと違う部署名を選択すると
>今までの担当者名が見えなくなってしまいます。
>(例えば、「営業1課 佐藤」を作成したレコードの次に、「営業2課 鈴木」を
>入力すると、「営業1課 佐藤」→「営業1課    」となってしまいます)。
>見積もり書のテーブルには「営業1課 佐藤」の記録は残っているので、フォーム
>上での表示の問題だと思うのですが、よい解決策はないものでしょうか?

この現象はコンボの値集合ソースの1列目以外をコンボに表示すると
起きます。
※この表示方法も私的には特殊と思っています。実際は数値型の社員IDに対して
 テキスト型の社員名を表示しているわけですから...

cmb担当者に対してRequery行わなければ件の絞り込みはできませんし、行うと
この現象が起きることになります。
現状のままで回避する方法は私的には思いつきません。

1つは案としては
現在入力されているフォームのレコードソースはテーブル(テーブルAとします)と
なっていると思います。このレコードソースを以下のように変更して

SELECT テーブルA.*, 社員マスタ.社員名
FROM 社員マスタ RIGHT JOIN テーブルA ON 社員マスタ.社員ID=テーブルA.社員ID;

して、テーブルAの社員IDと結合した社員名を表示できるようにします。

cmb担当者のプロパティで
列幅を0.5cm;2.54cm
としてcmb担当者には「ID」を表示するようにします。
cmb担当者の隣にテキストボックスを配置し、コントロールソースを「社員名」に
します。このテキストボックスのプロパティの「使用可能」を「いいえ」として
「編集ロック」を「はい」にしておけば弄られることはないと思います。

如何でしょうか?

【3883】Re:コンボボックスの連携がうまくいきませ...
お礼  なべなべ  - 04/11/23(火) 5:43 -

引用なし
パスワード
   クロさんへ
お世話になっております。
いろいろとご迷惑をおかけしてまいりましたが、お陰さまで問題が解決しました。
どうもありがとうございました。

また、質問することがあると思いますがその節もよろしくお願い申し上げます。

それにしてもAccessは難しいですね。これからもっと精進したいと思います。

ありがとうございました。

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