• ベストアンサー

入力した値をコンボボックスにすぐに反映させる方法

テーブルでコンボボックスから選んでデータを入力したい場合、コンボボックスの内容を他のテーブルやクエリあるいは値リストから抽出する方法はわかりますが、コンボボックスの内容に該当するものが無い場合、一覧から選ばずに、手入力することにしたいと思っています。そこで、手入力した後次のレコードに移動した時にコンボボックスの内容に手入力した内容がすぐに反映するようにしたいのですが、うまい方法は無いでしょうか?私としてはいちいち他のテーブルを開いて入力したりせずにしたいのですが・・・

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

  • ベストアンサー
  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.5

同じテーブルからリストを取得する為には、一度レコードを保存する以外ないようです。そのため今まで設定した「データ入力のチェック」を"いいえ"に戻し、「リスト外入力時」のボックスから"[イベントプロジージャ]"の文字を消したうえで、「更新後処理」に設定したモジュールの中身を下記のように置き換えます。 ' レコードを保存し、コンボボックスのリストを再作成します。 DoCmd.RunCommand acCmdSaveRecord Me![(コンボボックス名)].Requery (*)例によって同じフォーム内に、同じテーブル(クエリー)からリストを作っているコンボボックスがあるなら、その分も上記とまったく同じ構文で行を作成します。 あまり綺麗な方法ではないですが、これが一番現実的な方法のようです。

kitaosa
質問者

お礼

試してみたところうまくいきました!大変ありがとうございました。(お礼が遅れてしまいすみませんでした。)

その他の回答 (4)

  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.4

回答が何回にも分かれてしまってすみません。 たしかにクエリーを元にしている場合など、おっしゃる通りの手順を踏まないとリストが更新されないみたいですね。 コンボボックスのプロパティを開き、「更新後処理」から開いたモジュール作成画面で、"Private Sub~"の行と"End Sub"の行の間に、 Me![(コンボボックス名)].Requery という行を作成してみてください。 同じフォーム内に、同じテーブル(クエリー)からリストを作っているコンボボックスがあるなら、その分も上記とまったく同じ構文で行を作成してみてください。 これで、おそらくコンボボックス更新後にすぐ反映されます。

kitaosa
質問者

補足

すみません。そもそもフォームプロパティの入力チェックの項目を「はい」に変更する操作を行っていませんでした。結果問題なく動作しました。ありがとうございました。ところで、この方法はコンボボックスの値の取得元(例えばテーブルB)がフォームを作成する元になったもの(例えばテーブルA)と別な場合にうまくいきますが、私がやりたい方法としてはコンボボックスの値の取得元が同じテーブルAである場合です。もちろんそのまま取得すると様々な重複した値がそのままコンボボックスの内容になりしますので、重複したデータを自動的に1個にするクエリAを作成して(これは問題なくできました)そのクエリAをコンボボックスの値の取得元にしてみましたが、次のレコードへ移動する前にエラーが表示され、モジュール文の.AddNewのところでとまってしまうようです。そこでフォームプロパティの入力チェックの項目を「いいえ」に変更したところ、次のレコードへ移動しましたが、“更新”に匹敵する操作を行わない限りコンボボックスの値に反映されませんでした。いろいろと文句ばかり言うようで、もうしわけありませんが、上記の内容を解消できる術がありましたらご教示ください。

  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.3

再検証してみたのですが、先に紹介したモジュールではやはりフォームでの入力直後にリスト追加されるようですけれど、お使いの環境ではうまくいっていないのでしょうか? もう一度確認してみてください。 それと、下記のモジュールに一点修正個所があります。 「.Update」の行と「End With」の行の間に一行、 .Close というrecordset終了行が抜けていました。下記のモジュールをコピーしていた場合、追加しておいてください(なくても動作上不具合はないようですが)。 モジュールに抜けている行があり、すみませんでした。

kitaosa
質問者

補足

フォームプロパティの入力チェックの項目を「はい」に変更する操作を行っていませんでした。結果問題なく動作しました。ありがとうございました。ところで、この方法はコンボボックスの値の取得元(例えばテーブルB)がフォームを作成する元になったもの(例えばテーブルA)と別な場合にうまくいきますが、私がやりたい方法としてはコンボボックスの値の取得元が同じテーブルAである場合です。もちろんそのまま取得すると様々な重複した値がそのままコンボボックスの内容になりしますので、重複したデータを自動的に1個にするクエリAを作成して(これは問題なくできました)そのクエリAをコンボボックスの値の取得元にしてみましたが、次のレコードへ移動する前にモジュール文の.AddNewのところでとまってしまうようです。そこでフォームプロパティの入力チェックの項目を「いいえ」に変更したところ、次のレコードへ移動しましたが、“更新”に匹敵する操作を行わない限りコンボボックスの値に反映されませんでした。いろいろと文句ばかり言うようで、もうしわけありませんが、上記の内容を解消できる術がありましたらご教示ください。

  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.2

Ms Accessではテーブル(クエリー)を元にしたコンボボックスコントロールへリスト外入力を行う事があり、なおかつそれをリストに加えたいという場合、フォームを使用します。 そのため、まずは「コンボボックスから選んでデータを入力したい」テーブルに関連付けたフォームを作成します。いろいろとフォームには作成手順があるのですが、今回のご質問のケースの場合、テーブルに直接入力する事を考えられていたわけですからウィザードを使用して「データシート」で作成してもいいと思います。 次に作成したフォームをデザイン画面(編集画面)で開き、目的のコンボボックスを右クリックして「プロパティ」を開きます。そして開いたダイアログの表示を「イベント」のページに切り替え、ストの中の「リスト外入力時」を選択し、右側に現れた「…」ボタンを押します。するともう一枚ダイアログが表示されると思いますのでその中から「コードビルダ」を選択してください。これで、モジュール作成画面が開くはずです。 そして、画面が切り替わり、モジュール作成画面んが開いたら、"Private Sub~"の行と"End Sub"の行の間に、下記のサンプルを貼り付けてみてください。 ただし、これはあくまでサンプルですので、このままでは動きません。 (テーブル名)の部分はリストのもとになっているテーブル名へ、 (フィールド名)の部分はそのテーブル内のリストが格納されているフィールド名へ、 それぞれ変更してください。 それが終了したらモジュールを保存して作成画面を閉じ、フォームのデザイン画面でまだ開いているはずのコンボボックスのプロパティのページを「データ」に切り替え「入力チェック」の項目を「はい」に切り替えてフォームを保存するだけです。 下記のモジュールの動作確認は済んでいますのでおそらくそれでご希望の機能が動くと思います。 --- Response = acDataErrAdded Dim rst As Recordset Dim mydb As Database Dim crnttbl As String '現在のリスト一覧をテーブル(クエリー)から取得します。 Set mydb = CurrentDb crnttbl = "(テーブル名)" Set rst = mydb.OpenRecordset(crnttbl) 'リストに新規レコードを入力し、取得元テーブルを更新します。 With rst .AddNew ![(フィールド名)] = NewData .Update End With

kitaosa
質問者

補足

細かな所まで説明して頂いて非常に助かりました。実際に試してみましたが、データシートビューのフォームではツールメニューの”レコード”→”更新”を実行して新しい値がコンボボックスに反映されるようです。欲をいって申し訳ありませんが、別のフィールド(レコード)へ移動したらすぐに反映されるようにしたいのですが、無理でしょうか。

  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.1

アプリケーションは何を使用されているのでしょうか?(名前とバージョンを教えてください) アプリケーションによってやり方が変わりますのでそのあたりを教えて頂けないと皆さん回答に困られると思いますよ。

kitaosa
質問者

補足

質問内容が不十分でした。ACCESS2000を使用しています。宜しくお願い致します。

関連するQ&A

  • コンボボックス全ての値を取得させるには

    アクセスでクエリの抽出条件にコンボボックスで取得した値を反映させ、テーブルを 作成しエクスポートさせるマクロを組んでいるのですが、 ひとつひとつ実行させるのが手間なので、コンボボックス全ての値を取得させ クエリの抽出条件にひとつひとつ反映させてテーブル作成・エクスポート というマクロを組みたいのですが可能でしょうか?

  • コンボボックスの値が消えてしまいます。

    コンボボックスの値が消えてしまいます。 フォーム(1)にコンボボックスA(値集合ソースはテーブル1)があります、この リスト外入力時で別フォーム(2)(レコード追加用)を開きテーブル1にレコードを追加、 フォーム(2)を閉じる時にコンボボックスAをリクエリかけてフォーム(1)に戻るとコンボボックスAが空になっているのでリストを開き選択し直さなければいけません! フォーム(1)に戻った時コンボボックスAに入力した値を選択させておくにはどの様にすれば良いか アドバイスよろしくお願いいたします。 WIN XP ACCESS 2003で作成しています。

  • accessのコンボボックスを連動させた結果の反映

    access2002を使用しています。必要に駆られて勉強を始めましたが行き詰ってます。 初歩的な質問ですが宜しくお願いします。 AとBのコンボボックスでAで特定値を入れたときにその結果を再クエリでBの選択肢を絞り込むコンボボックスを作成しています。 http://oshiete1.goo.ne.jp/qa1413361.html の返答を参考にその通りの物を作ってみたのですが、(以下) 反映されたデータの入力テーブルの氏名入力にも、所属部が入力されてしまいます。Bのコンボボックスで選択した氏名を〔反映されたデータの入力〕テーブルの〔氏名入力〕に反映させたい場合はどのような変更を加えれば良いのでしょうか? ご指導頂ければ幸いです。

  • コンボボックスの抽出条件でカレントレコードだけ

    コンボボックスでカレントレコードに表示している商品IDに対応する値を表示させたいのですが、教えてください。 表形式のサブフォームにコンボボックスを設置しています。(レコードごとにコンボボックスがある) 値集合タイプはテーブル/クエリ、値集合ソースはクエリビルダで作成しようと思っています。 クエリビルダにはコンボボックスに表示したい別テーブルのフィールドを入力しています。 そこで、サブフォームのカレントレコードに入力した商品IDで絞込みを行うため、商品IDの抽出条件に[Forms]![frm出庫]![frm出庫商品].[Form]![商品ID]と記入したのですが、実行してみると、一行目のレコードのときはいいのですが二行目三行目のレコードの入力時もどうしても表示中の一行目のレコードの商品IDでの絞り込みしかしてくれません。 おそらくクエリの中のどこかにカレントレコードの商品IDを見るよう指定しなければいけないのだと思うのですが、その方法が分からず行き詰っています。 どうぞ宜しくお願い致します。

  • コンボボックスの2列目の値を表示させる方法はありま

    アクセス2003です。 コンボボックスの2列目の値を表示させる方法はありますか? テーブル1には ID 会社名 1 山田建設 2 田中株式会社 といれ、 テーブル1をレコードソースとするフォームを作り、コンボボックスを設置し そのコンボボックスのプロパティは 値集合タイプ:テーブル/クエリ 値集合ソース:テーブル1 列数:2 にしました。 この場合、コンボボックスで値を選択した後は、一番左側の数字がコンボボックスに入力されますが 左から2列目の値を表示させる方法はありますか? IDと会社名のフィールドを順番を変えることなく、IDが左、会社名が右にしたいです。 エクセルで例えると http://www.moug.net/tech/exvba/0090021.html と同じようなことをアクセスで行いたいです。 プロパティではなくエクセルのようにVBAで配列を使うしかないのでしょうか?(コードもわかりませんが) よろしくお願い致します。

  • Access2003のフォームのコンボボックスは入力が必須なのでしょうか?

    会員管理のデータベースを作っています。 新規入力画面のフォームに5つのコンボボックスがあります。 広告媒体やコース、担当者を選択するコンボです。 新規入力して、「レコードの保存」「レポートを開く」クエリを組んだボタンで 入力後に顧客名や諸情報の入ったレポートを出しているのですが コンボボックスが1つでも未選択だと、空のレポートが開いてしまいます。 未選択コンボがあっても、where条件で氏名でひぱって、氏名+入っている情報だけでレポートを出したいのですが・・・。 未選択コンボがあると、テーブルには保存できてもレポートには反映されないものなのでしょうか?

  • ACCESS2003のコンボボックスで入力候補が出ません

    ACCESS2003のコンボボックスで入力候補が出ません 先日似たような質問をさせていただきましたが、まだ未解決なのでまた質問させてください。 OSはWindows XP Professional SP3 です。OFFICE2003 Professional SP3 です。 Access2003 sp3 で自作した一覧フォームにコンボボックスを設定しています。 コンボボックスの値集合リストにクエリをあてています。 同じ値のレコードが多数ありますので、リスト表示が重複しないようにクエリで集計しています。 連結列は1つで単純な単語集です。経理の科目を表示しています。 そこに、データを入力しようとして途中まで入力します。例えば、”売掛”と入力した時点でリストに存在する”売掛金”が表示されます。 これは問題ないのですが、他の単語は出ない時があります。 例えば”広告”と入力した時、”広告宣伝費”という単語が登録されているのに出てきません。 調べた結果、リストにある上位50レコードまでが候補に出てきますが、51以下のレコードは出てきません。 ただし、クエリで集計などを使わない単純なリストでは、ちゃんと候補が出てきます。 クエリで集計などを行うと、コンボボックスの上位50レコードまでしか入力候補が出てきません。 ちなみに、まったく同じものをAccess2007で実行したら、ちゃんと全ての候補が出てきます。 sp3以前はこんなことはなかったように思います。 そこで、Access2003 sp3 の修正パッチをあててみたのですが変化ありませんでした。 長文で申し訳ございませんが、誰か解決方法をご存知の方がいらっしゃいましたらご指導お願いいたします。

  • アクセスのコンボボックスの重複をなくすには?

    初歩的な質問ですいませんが、教えてください。 アクセスの参考書や、初心者向けサイト等を見て、 コンボボックスで値集合タイプが「テーブル/クエリ」のとき値集合ソースの値を重複させないで表示する方法はわかったのですが、どの書籍もコンボボックスが2個までしかのっていないんです。 現在私が作らなければならないのはコンボボックスが6個在るもので2個目以降からどのようにしたらいいかわかりません。 コンボ1で抽出した値をコンボ2で反映させて、さらにコンボ2の値の重複をなくし、さらにコンボ3で反映させて・・・とやっていくにはどうしたらいいのでしょうか。 ちなみに http://www.accessclub.jp/beginer/cd/part_07.htm 上記サイトの方法を参考に作成しています。 よろしくお願いします。

  • Access フォームコンボボックス空白をクエリで抽出したい

    現在access2000を使って、 フォーム1内にコンボボックスを作って コンボボックス内に1,2,3 と項目を入れています。 一方、クエリを使って、上記フォーム内のコンボボックスをつなげて1,2,3をそれぞれ抽出することはできるのですが、 1から3まで全てをiif関数などで 抽出したいと考えてします。 僕が考えた関数は iif(isnull([フォーム1][コンボ1]),is not null ,[フォーム1][コンボ1]) とクエリ抽出条件内に入力すると、結果は、 1、2、3をそれぞれフォームコンボボックスで選択すれば、クエリに反映されるのですが、コンボボックス内を「空白」の状態にすると、1,2,3すべてがクエリで抽出されるのではなく、何も抽出されないという結果になってしまいます。 どうすれば、クエリで1から3すべてを抽出することができるのでしょうか?多分、iif関数内の「空白」は空白として処理されないような気がします。 よろしくお願いします。

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

    入社して、名刺を貰う機会が多い為、名刺を管理するものを初歩的な参考書を見てACCESS97で作りたいと思います。テーブルで数名の氏名・会社名・部署名・役職・住所を作りました。良く分からなかったので、この1つのテーブルを基にパラメータを使って検索する「検索用画面」と新しいレコードが表示される「新規入力画面」をクエリーとフォームを別々に作りました。検索用画面は、これで良しとします。しかし、新規入力画面は、同会社名が多いので、コンボボックスを作り今まで登録したものからも選べる様にもしたいです。新しいレコードでは、表示されませんが、▼で前のレコード(既に入力してあるデータ)に戻ると、エラーメッセージで「このフィールドに入力した値が不正です。例えば、数値型のフィールドに文字列を入力しました。」と出てきてしまいます。コンボボックスいうのは、コンボボックスウィザードで「テーブルまたはクエリーを表示する」を選び、表示させたいものを選ぶだけでは、いけないのでしょうか・・。くだらない質問で申し訳ありませんが、回答の方宜しくお願いします。

専門家に質問してみよう