• ベストアンサー

コンボボックスで新規登録する場合

こんにちはアクセス初心者です。 コンボボックスの扱いについて行き詰っています。 説明が下手ですがどうぞよろしくおねがいします フォーム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 担当者マスタ.担当者コード; 別ボタンで新規登録をつくり リストに無い場合はフォームを表示させ テーブルに保存させるという方法も試しましたが デザイン上の問題があって とても小さなスペースしかとれず、 コマンドボタンをおくスペースもとるのが難しい感じなので できればコンボボックスだけで解決したいのですが。。 どなかた教えていただけると助かります どうぞよろしくおねがいいたします

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

  • ベストアンサー
  • psgrade
  • ベストアンサー率86% (19/22)
回答No.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

kuragemama
質問者

お礼

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

その他の回答 (1)

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

簡単な方法としてはUNIONでダミーレコードを追加する 1行だけあるテーブルを用意して(Dummy_TBL) SELECT 顧客マスタ.顧客コード, 顧客マスタ.顧客名, 顧客マスタ.〒, 顧客マスタ.現住所, 顧客マスタ.電話番号 FROM 顧客マスタ UNION ALL SELECT '9999',"新規登録","","","" FROM Dummy_TBL ORDER BY 顧客コード としてやれば新規登録が追加できます。 ここで9999が選択されれば新規登録画面を呼び出すようにすれば良いと思いますが

kuragemama
質問者

お礼

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

関連するQ&A