• ベストアンサー

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

こんにちはアクセス初心者です。 コンボボックスの扱いについて行き詰っています。 説明が下手ですがどうぞよろしくおねがいします フォーム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

  • コンボボックの連携について

    コンボボックの連携について Access2003を使用しているAccess初心者です。 フォーム1にコンボボックがあり、顧客テーブルのにリンクされています。 コンボには表示順に オートID 顧客No 顧客名です。 コンボボックを選択すると2番目の顧客名が表示するようになっています。 OKボタンで顧客登録画面を開いているのですが、この時、顧客登録画面の顧客No.もコンボボックスに しているのですが、フォーム1で選択したコンボボックスの値が顧客登録画面のコンボボックに反映しま せん。 どのように記述したら、顧客番号が反映するのでしょうか。 コンボボックスから別のフォームのコンボボックスには値は反映しないもなのでしょうか?

  • アクセス テキストボックスに値を返す

    こんにちは アクセス2000で管理表を作っています。 工事マスタ 工事ID 工事名 顧客ID 担当ID 顧客マスタ 顧客ID 顧客名 〒 現住所 電話 ファックス メールアドレス (詳細は略) クエリA SELECT 工事マスタ.工事ID, 工事マスタ.工事名, 工事マスタ.顧客ID, 工事マスタ.担当ID, 工事マスタ.顧客担当ID FROM 工事マスタ; 上記のようなテーブル構成とクエリで フォームAを作成しています (コントロールソースはクエリA) フォームAに 顧客IDのコンボボックス顧客コンボを作り それを選択すると詳細が テキストボックス「〒TB」「現住所TB」「電話番号TB」「FAXTB」「メールアドレスTB」に反映するという形をとっています Private Sub 顧客コンボ_AfterUpdate() Me!顧客担当コンボ.Requery '内容反映ここから Me.〒TB = Me.顧客コンボ.Column(2) Me.現住所TB = Me.顧客コンボ.Column(3) Me.電話番号TB = Me.顧客コンボ.Column(4) Me.FAXTB = Me.顧客コンボ.Column(5) Me.メールアドレスTB = Me.顧客コンボ.Column(6) '反映ここまで End Sub うまくいっているように見えたのですが 全部のレコードが変更になっていることに 先程気づきました(T_T;) 調べてみると 非連結だから当たり前ということなのですが これを、各々のレコードで反映できる方法はないでしょうか?

  • Accessのコンボボックスの使い方について

    初心者です。 コンボボックスの使い方について教えて下さい。 商品テーブルA 商品名|コードA|コードB|コードC| マスターテーブル A|B|商品名|コードA|コードB|コードC|D|E のような2つのテーブルを作成し、マスターテーブルの「商品名」に コンボボックスで商品テーブルAの商品名を表示させるとします。 そこでコンボボックスで商品名を選択すると同時に 商品テーブルAからほかの「コードA」「コードB」「コードC」の値を マスターテーブルの「コードA」「コードB」「コードC」に入れる方法は ありますでしょうか? また、他の方法はありますでしょうか? 宜しくお願い致します。

  • 困ってます!Accessフォームのコンボボックス

    初心者です。とーっても困っています・・・。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 が、しかし、選んだデータがテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、テーブルを見ると、他のテキストボックスに入力した情報は保存されているけど、コンボで選んだデータは空白です。 誰か助けてください!!よろしくお願いします。

  • accessのコンボボックスのことで質問です。

    accessを勉強しているのですが、ちょっとしたことで分からなくなってしまいました・・。 質問の内容なのですが、まずフォーム上にコンボボックスAとコンボボックスBを配置するとします。 レコードソースには仮に[情報テーブル]というテーブルが選択されているとします。 コンボボックスAには[情報テーブル]のフィールド名が、 例えば[顧客NO]、[商品]、[値段]というフィールド名が入っているとし、フィールドにはそれぞれ10件ずつデータが入力されています。 そしてコンボボックスAで[顧客NO]を選択するとコンボボックスBに[顧客NO]の10件のデータが挿入され、選択できるようにしたいのです。 他のフィールド名を選んだときにも同じようにコンボボックスBにフィールドのデータが入るようにしたいと思っています。 コンボボックスAにテーブル名を入れることはできたのですが、 コンボボックスAで選択されたフィールドのデータを、コンボボックスBで選択できるようにするというやり方がわからないのです・・。 accessは2002を使っています。 よろしくお願いします。

  • ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使っ

    ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使って登録 ACCESSのフォームを使ってデータ入力を作成しています、"顧客名"をコンボボックスを使って選択するようにしていますが。 リスト外の新規顧客を入力する際には別の"顧客登録"フォームが開いて、顧客情報(読み仮名、顧客名、都道府県コード、所在地)を入力して、閉じると登録した"顧客名"がコンボボックスから選択できるようにしたいと思い、マクロを使用して(VBはよくわからないので) イベント→リスト外入力時→”顧客登録”フォームが開く 必要事項を入力し、閉じるボタンをクリック。 してみたのですが、コンボボックスのリストに先に入力した新規データが出てきません。 何が足りないのかご教授お願いいたします

  • access コンボボックスの次

    顧客管理・商品管理の簡略化を目指している初心者です。商品マスター・仕入先・販売先というテーブルを作成、商品情報の入力・閲覧のためのフォームを作ろうと思っています。 1)商品マスターテーブルには、仕入先コードと販売先コードが入っています。フォーム上では仕入先名・販売先名も確認したいのですが、 「商品マスターテーブルにそれらを追加したクエリを作成 → クエリからフォームを作成」 という方法でよいでしょうか。 2)フォーム上で仕入先コードと仕入先名のコンボボックスを設置します。コードを選択すると自動的に次の欄に仕入先名が反映されるようにする方法を教えてください。 おそらく非常に初歩的な質問かと思いますが、マニュアルを見たり検索をかけたりしても要領を得ません。アドバイスをどうぞよろしくお願いいたします。

  • Access コンボボックスの絞り込み後の表示

    Access2002を使用しております。 コンボボックスAに連動したデータを絞り込みさせるコンボボックスBがありますが、一旦入力後は、コンボボックスAの値にかかわらずコンボボックスBに入力したデータを表示させるにはどうしたらよいでしょうか? 例として、次の3つのテーブルを基にデータベースを作成しております: メインテーブル フィールド名: ID 社名 担当者 社名テーブル ID   社名   住所 etc... ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1    A社 2    B社  担当者テーブル ID   社名ID   担当者名  電話番号 etc... ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1    1      木村 2    2      佐藤 3    1      田中 4    2      斎藤 メインテーブルを基にしてフォームを作成し、 「メイン」というフォーム名にして 「社名」「担当者」をフィールドのコントロールをコンボボックスに変更しました。 「社名」フィールドの値集合ソースを「社名テーブル」から引き出し SELECT [社名テーブル].ID, [社名テーブル].社名 FROM 社名テーブル; 列数2  で設定し、社名をコンボボックスで選択できるようにしました。 そして 「担当者」フィールドの値集合ソースを「担当者テーブル」から引き出し SELECT 担当者テーブル.ID, 担当者テーブル.担当者名, 担当者テーブル.社名 FROM 担当者テーブル WHERE (((担当者テーブル.社名)=forms!メイン.社名)); で設定しました。 「社名」フィールドの「更新後処理」で Private Sub 社名_AfterUpdate()     Me!担当者.Requery End Sub を設定しました。 「メイン」フォームをフォームビューで開き、「社名」コンボボックスで「A社」を選択すると 「担当者」コンボボックスで「木村」と「田中」が表示されるので、「木村」を選択します。 次のレコードに移り、「社名」コンボボックスで「B社」を選択すると 「担当者」コンボボックスで「佐藤」「斎藤」が表示されるので、「佐藤」を選択します。 さて、「佐藤」を入力した時点で、前のレコード(「A社」「木村」を選択)に戻ると 「担当者」欄が空欄で表示されます。 メインテーブルには全てデータは入力されています。 データ入力時は「担当者」コンボボックスは「社名」コンボボックスで選択した値に連動させたいのですが、 このようにデータ入力済みの場合は 最初のコンボボックスの値にかかわらず(この場合は直近に選択した社名がA社・B社のいずれかであろうとも) 入力済みのデータ(「木村」「佐藤」)がフォームに表示されるようにしたいのですが 何か良い方法はないでしょうか? 出来れば入力専用と読み取り専用のフォームを2つ使用するのではなく、1つのフォームで事足りればありがたいのですが・・・

  • 追加したデータをコンボボックスへ即反映させたい。

    困っておりますので(私の勝手で申し訳ないですが)、アドバイスをお願いします。 【現状と状況のご説明】 収集した情報を活用する為にACCESSでデータを保存しております。登録した情報を絞込んで検索する為に、入力時に3つの定型項目をコンボボックスを使ったプルダウンメニューの形式で入力しています。 定型項目(3項目)への新たな項目追加は、個別(3つ)のテーブルを作成。そのテーブルからフォームを個別に3つ作成し、情報登録フォーム上にボタン(フォームを開くマクロ)を配して新たな項目を追加しています。 【簡単に構成をご説明】 ・テーブル名:情報登録テーブル(1つのテーブル) ・入力フォーム名:情報登録フォーム(3つのコンボボックス:A・B・C) ・テーブル名:情報項目テーブル(3つのテーブル) ・情報項目フォーム名:Aフォーム、Bフォーム、Cフォーム 【困っていること】 情報登録フォームから情報項目フォーム(A・B・C)を開いて、項目を追加したあと情報項目フォームを閉じても、開いている情報登録フォームのコンボボックスへ反映させられず(コンボボックスのメニューに未反映)、一度、情報登録フォームを終了させて、再度情報登録フォームを起動させるしかない状況です(そうすれば、コンボボックスのメニューに反映)。 【希望】 情報登録フォームを開いたままで、情報項目フォーム(A・B・C)に追加した項目をコンボボックスへ即反映させ、情報登録力フォームへの即入力を可能にさせたい。 以上ですが、宜しくお願いします。

  • ACCESSのコンボボックスについて

    ACCESSでコンボボックスを使っているときに たまに入力できなくなってしまう時があり困っています。 例えばA,B,Cという3つのデータを選択できるコンボボックスがあり、 現在、Aが選択されていてBに変更しようとした時に コンボボックスの表示部分が突然空欄(または選択されているのに表示されていない)になってしまいます。 その後、どれを選択してもコンボボックスには何も表示されなくなってしまいます。 この現象が起こるとなぜか同じフォーム内のボタンなどにも不都合が起こるようになってしまいます。 (テキストボックスのデータを削除するボタンがあるのですがおしてもなにも起こらなくなってしまいました) いろいろ試しているのですが全く原因がわかりません。 どのようなところに原因がありそうかなどあれば教えてください。 宜しくお願いします。

専門家に質問してみよう