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

こんにちはアクセス初心者です。
コンボボックスの扱いについて行き詰っています。
説明が下手ですがどうぞよろしくおねがいします

フォームAで
コンボAとコンボBの
2つのコンボボックスを連動しています
コンボAで選んだ発注者名を選択して詳細項目を表示し、
その担当者をコンボBで絞込み
担当者の詳細情報を表示しています

コンボAに項目がない場合、
別ウィンドウで入力フォームが開き
新規登録後、その値が即座に反映され、
コンボBにはその抽出された値が表示され、
更にコンボBに項目が無い場合も同様に
登録作業をしたいのですが

どういう方法が一番いいのでしょうか?

一番の理想としては
コンボAを選択すると
A社
B社
C社
新規登録

というようなリストが表示され
新規登録を選択すると
別ウィンドウで登録フォーム開き
複数項目を入力、OKを押すとその内容が
フォームAに反映され
コンボBの選択へ。

コンボBには
田中
佐藤
新規登録

と表示されている状態が理想です

コンボAで顧客コードを選択すると
他の内容を下記のように
VBAでフォーム上のテキストボックスに反映させています
Private Sub コンボA_AfterUpdate()
Me!担当者名コンボ.Requery
'内容反映
Me.〒 = Me.顧客名コンボ.Column(2)
Me.現住所 = Me.顧客名コンボ.Column(3)
Me.電話番号 = Me.顧客名コンボ.Column(4)

コンボA
SELECT
顧客マスタ.顧客コード, 顧客マスタ.顧客名, 顧客マスタ.〒, 顧客マスタ.現住所, 顧客マスタ.電話番号
FROM 顧客マスタ
ORDER BY 顧客マスタ.顧客コード;

コンボB
SELECT
担当者マスタ.担当者コード, 担当者マスタ.担当者名, 担当者マスタ.携帯番号, 担当者マスタ.顧客コード
FROM 担当者マスタ
WHERE (((担当者マスタ.顧客コード)=[forms]![フォームA]![コンボA]))
ORDER BY 担当者マスタ.担当者コード;

別ボタンで新規登録をつくり
リストに無い場合はフォームを表示させ
テーブルに保存させるという方法も試しましたが
デザイン上の問題があって
とても小さなスペースしかとれず、
コマンドボタンをおくスペースもとるのが難しい感じなので
できればコンボボックスだけで解決したいのですが。。

どなかた教えていただけると助かります
どうぞよろしくおねがいいたします

A 回答 (2件)

私の場合は、コンボボックスのダブルクリック時イベントを使用してコンボボックスの元データとなるテーブルをデータソースとしたフォームを表示させるようにしています。


登録済みの場合は、登録データの確認・修正ができ、新規登録したい時には新規登録できます。フォームを閉じる時に、元のコンボボックスに再クエリーを行うと編集結果が反映されます。この操作をイベントプロシージャーに記述します。以下がその例です。

Private Sub コンボA_DblClick(Cancel As Integer)
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 'フォームが保存されておらず、編集中の場合、再クエリ時エラーとなります。これを回避する為、一旦レコード保存します。
Set PubCtl = Me.コンボA '標準モジュールに Public PubCtl as Control と宣言しておく。
If IsNull(Me.コンボA) Then 'Nullなら新規追加でフォームを開く。
DoCmd.OpenForm "顧客テーブル", , , , acFormAdd
Else 'Nullでないときは、表示顧客のデータを表示します。この場合でも新規追加できます。
DoCmd.OpenForm "顧客テーブル", , , "[顧客名] ='" & Me.コンボA & "'"
End If
End Sub
顧客テーブルの閉じるイベント
Private Sub Form_Close()
PubCtl.Requery
Set PubCtl = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます
この方法はいろいろ応用できそうです!
大変勉強になりました
早速ためしてみます
ありがとうございました!

お礼日時:2009/01/15 11:54

簡単な方法としてはUNIONでダミーレコードを追加する


1行だけあるテーブルを用意して(Dummy_TBL)

SELECT 顧客マスタ.顧客コード, 顧客マスタ.顧客名, 顧客マスタ.〒, 顧客マスタ.現住所, 顧客マスタ.電話番号
FROM 顧客マスタ
UNION ALL SELECT '9999',"新規登録","","","" FROM Dummy_TBL
ORDER BY 顧客コード

としてやれば新規登録が追加できます。
ここで9999が選択されれば新規登録画面を呼び出すようにすれば良いと思いますが
    • good
    • 0
この回答へのお礼

ありがとうございます
UNIONを使ったことがなく、
上記の説明でいろいろためしてみましたが
うまくいきませんでした
もう少し 考えてみて
再度質問したいと思います
本当にありがとうございます!

お礼日時:2009/01/15 11:53

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