• ベストアンサー

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

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

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

  • ベストアンサー
  • WOPR
  • ベストアンサー率29% (38/131)
回答No.3

さて、初心者と書かれてらっしゃいますがどこまでの初心者なのか想像できませんので、びっくりするくらい初心者と想定して書きます。お気を悪くされませんよう。 1. ブレークポインタを設定する .Text = temp の行にカーソルを当てて、F9 を押してください。行が赤茶になります。 プログラムを実行してその行の処理になったら自動的に一時停止状態になります。 その時に temp の値を確認してください。 確認方法は、temp にマウスカーソルを持っていくと(クリックなどしない)変数の中身が表示されます。 このときの temp の中身はどうなっていますか。 2. ミニマムコード(正式名称は知らない)を作る とにかく実行するための最小構成になるようなプログラムを作成します。 労力をケチってはいけません。3 日も 4 日も悩んでいた問題が、数分で解決することもあります。 ・新規でデータベースを作成します。デスクトップ上に「db1.mdb」とかそんなんでいいです。 ・テーブル「テーブル1」を作成します。 ・「テーブル1」にフィールド名「名称」データ型「テキスト型」で主キーを作成します。 ・フォーム「フォーム1」を作成します。 ・「フォーム1」にコンボボックス「コンボ0」を作成します。 ・「コンボ0」の〔値集合ソース〕を「テーブル1」にします。 ・「コンボ0」の〔入力チェック〕を「はい」にします。 ・「コンボ0」の〔リスト外入力時〕に以下の[イベント プロシージャ]を書きます。 Private Sub コンボ0_NotInList(NewData As String, Response As Integer) DoCmd.OpenForm "フォーム2" End Sub ・フォーム「フォーム2」を作成します。 ・「フォーム2」の〔レコードソース〕を「テーブル1」にします。 ・「フォーム2」にテキストボックス「テキスト0」を作成します。 ・「テキスト0」の〔コントロールソース〕を「名称」にします。 ・「フォーム2」の〔挿入後処理〕に以下の[イベント プロシージャ]を書きます。 Option Compare Database Option Explicit Dim temp As String ← ANo.2 への返信の場所で合っています。 Private Sub Form_AfterInsert() temp = テキスト0 End Sub ・「フォーム2」の〔閉じる時〕に以下の[イベント プロシージャ]を書きます。 Private Sub Form_Close() With Forms("フォーム1").Controls("コンボ0") .Undo .Requery .Text = temp End With End Sub ・最後に「フォーム1」を実行します。 ・.Temp = temp にカーソルをあてて F9 を押してブレークポインタを設定してみてもいいかもしれません。 いろいろとテストしてみてください。ご検討を祈ります。

KOUSUKE0409
質問者

お礼

遅くなりましてすいません! ご教授ありがとうございます。 自分は本を読みあさりNETで必要なコードだけ拾って独学で顧客管理を作っているので 基本がシッカリ出来ていません・・・ ですのでWOPRさんに教えて頂いた"基本作業""労力をケチってはいけません"など大変為になります。 頂いた上記の事項を慌てず実行して行きたいと思います、丁重なレスありがとうございました。 また宜しくお願いいたします。 

その他の回答 (2)

  • WOPR
  • ベストアンサー率29% (38/131)
回答No.2

ちょ………っと美しくないコードなので恐縮ですが。 Form2 のコード Option Compare Database Option Explicit Dim temp As String Private Sub Form_AfterInsert() temp = txt型式 End Sub Private Sub Form_Close() With Forms("F車検証").Controls("cmb型式") .Undo .Requery .Text = temp End With End Sub ・Form2 を閉じる時に、txt型式の値が空白である可能性があります。  どうも新規で入力された最終行ではなくてレコードの最初の行のように思われます。  つまり、cmb型式が空になっているのではなく、cmb型式 = txt型式の時に空白がセットされている可能性があります。 ・それを回避するために、Form_AfterInsert(挿入後処理) でtxt型式の値を temp に退避しておきます。 ・閉じる時に、.Undo を入れないとエラーが出たので入れておきました。 ・.Text に、さっき退避した temp の値を入れます。 以上で私のミニマムコードでは Form1 に戻った時にコンボボックス A に入力した値を選択させておくことができました。

KOUSUKE0409
質問者

お礼

丁寧な説明ありがとうございます! 初心者の僕にも大変解りやすいです。 頂いたコードを記述してみましたが、コンボボックスにセット出来ません。自分のやり方がいけないと思うのですが・・・(T _T) 変数宣言の強制と変数の宣言が少しおかしい所で区切られてしまうと思うのですが、確認お願いします。 Option Compare Database Option Explicit Dim temp As String  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Private Sub Form_AfterInsert() temp = txt型式 End Sub  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じです、お手数お掛けします。 よろしくお願いいたします。

  • WOPR
  • ベストアンサー率29% (38/131)
回答No.1

はじめまして フォーム(2)を閉じるときに、コンボボックス A をリクエリして、その次に新しく追加されたレコードの値をセットされてはいかがですか。 Private Sub Form_Close() Forms("Form1").Controls("ComboBoxA").Requery Forms("Form1").Controls("ComboBoxA") = "あいうえお" End Sub こんな感じですか?

KOUSUKE0409
質問者

お礼

早急な返答ありがとうございます。 セットしたい値がtxt型式で追加しているので下記の感じで試してみたのですが やはりcmb型式は空でした。       Forms!F車検証.cmb型式.Requery    Forms("F車検証").Controls("cmb型式") = "txt型式" の他に    FormsF車検証".cmb型式 = txt型式   や    Forms!F車検証.cmb型式=NewIndex など色々試したのですが、出来ません! cmbBoxに値を代入するにはtxtBoxの値を当てても駄目なんでしょうか? お力添えよろしくお願いいたします。

関連するQ&A

  • コンボボックスを使った入力の改善

    コンボボックスを使った入力を全てのデータベースで利用しています。しかし、各コンボボックスがそれぞれ独立「単体動作」しているので、コンボボックスの初段目「最初」はレコード数が少ないのですが、2段目3段目になると選択候補が累積表示されるので、候補の数も多くなり使いづらさを感じるデータベースも増えました。この状況を改善したいと思っていますので、宜しくお願いします。尚、データベースで設定しているコンボボックス全てに言えることでもありますので、以下のケースを紹介させていただきますので、アドバイスをお願いしたいと思います。 [現状でのやり方] コンボボックス参照オブジェクトは以下の構成にて、コンボボックスは独立していて連動していません。なお、参照データの追加作業は別途作成したフォームを、データ入力フォームに配したコマンドボタンで開いて行っています。 [コンボボックス関連オブジェクト(例)] コンボボックス名:都道府県(値集合ソースで都道府県のみ選択) テーブル名:都道府県テーブル フィールド名:ID、都道府県 フォーム名(参照データ追加):都道府県追加フォーム ※「新規追加後の入力フォームへの即反映はアドバイスにより完結済」 コンボボックス名:市町村(値集合ソースで市町村のみ選択) テーブル名:市町村 フィールド名:ID、市町村 フォーム名(参照データ追加):市町村追加フォーム ※「新規追加後の入力フォームへの即反映はアドバイスにより完結済」 [改善させたいこと] コンボボックス「都道府県」で東京都を選択したとき、次のコンボボックス「市町村」では東京都の市町村だけが次の候補として表示させたいと思っています。又、現在は蓄積データの絞り込み検索で設定していますが、選択コンボボックスの次のコンボボックスを自動プルダウンさせ、候補も同時に表示させ入力できればと考えています。 以上ですが、宜しくお願いします。

  • 【Access】コンボボックスの値の変更方法

    フォームにコンボボックスを配置し、下記の動作をさせたいと思ったのですが、1は出来たものの2が出来ませんでした(値集合ソースの中身は表示されるものの、選択してもコンボボックスに反映されませんでした)。 1. フォームオープン・・・データベースのcmb1の値より、対応する文字をコンボボックスに表示する。 2. コンボボックスの値の変更・・・プルダウンから値集合ソースに表示されている任意の値を選択し、コンボボックスに設定する。 その為、どうすれば値を変更できるようになるかアドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、初期状態から下記を変更しております。 【テーブル】 テーブル名:tbl フィールド名:ID,cmb1 値:1,2 【フォーム】 フォーム名:form1(コンボボックスを一つ配置) フォームのレコードソース:SELECT Choose(tbl.cmb1,"A","B","C") AS nm_cmb FROM tbl WHERE (((tbl.ID)=1)); コンボボックス 列数:2 列幅:0cm;3cm コントロールソース:nm_cmb 値集合タイプ:値リスト 値集合ソース:1;A;2;B;3;C 連結列:2 上記の状態で起動時のコンボボックスの中身は"B"と表示されるものの、コンボボックスのプルダウンメニューを表示して値を変更しようとしても出来ない事が確認できると思います。 以上、よろしくお願いします。

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

    2007です。いつもお世話になります。 フォーム上にチェックボックスがあります。 チェックが入った時点で同じフォーム上のコンボボックスのリストから特定のものを選択したいです。 しかし、チェックか゛入っていなければそのコンボボックスのリストから特定のものを除いたものを選択するようにする・・出来るでしょうか? チェックありならばコンボボックスの値集合ソース1.2.3の内の2だけを チェックなしならばコンボボックスの値集合ソース1.2.3の内の1.3だけしか選択出来ない というイメージです。 分からないなりに =IIf([チェック1]="true","1,"2" Or "3") にしたら、リストから選択どころか、-1という数字が出てきてしまいました。

  • コンボボックスで

    コンボボックスで、あるテーブルを参照してリストを出す場合、リスト中になかった場合に、コマンドボタンを押せばテーブルの追加フォームが出てきて入力できるようにしています。この場合に、入力フォーム内で終了(保存)ボタンを押せば、自動的にコンボボックスの中に入り、かつもう一度選択しなくても表示されているような操作はできないものでしょうか?

  • コンボボックスのリスト外入力について(Access2002)

    お世話になっております。 ひとつお聞きしたいのですが、Accessのコンボボックスプロパティの「リスト外入力」の設定のしかたが分かりません。 コンボボックスを非連結にして、コンボボックスより選択してフィルタをかける動作と、コンボボックスに値がなかったらコンボボックスに直接入力して新しい値を元に新規にレコードを追加すると言ったロジックを組み込みたいのですが可能でしょうか?よろしくお願いいたします。 まとめると、 (1)コンボボックスより値を選択して、フィルタをかける。 (2)コンボボックスに値が無かったら、コンボボックスに直接入力して新規レコードとして、レコードを追加する こう言った、流れでの作業です。

  • フォームのコンボボックスのチェンジイベントがエラー

    フォームのコンボボックスのチェンジイベントがエラーになってしまいます フォームのコンボボックスで値が変更するたびに コンボックスのリストを絞り込むようにしたいので フィールド1 1111 1112 1113 1211 1212 フォーム1を作成しコンボボックスを設置し 値集合ソースを SELECT テーブル1.フィールド1 FROM テーブル1 WHERE (((テーブル1.フィールド1) Like "*" & [テーブル1]![フィールド1] & "*")); として コンボボックスの変更時イベントに Private Sub コンボ0_Change() Form_フォーム1.コンボ0.Requery End Sub としました。 そしてこのコンボボックスに 「2」というように値を入力すると 「実行時エラー '2118' "Requery/再クエリ"アクションを実行する前に、カレンとフィールドを保存する必要があります。」 となってしまいます。 やりたいことは コンボボックスに「2」を入力すれば テーブル1の「2」が含まれるものが抽出され 1112 1211 1212 がコンボボックスの ▼マークをクリックした後のリストに表示されるようにしたいのですが どうすればいいでしょうか? よろしくお願いします。

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

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

  • 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つのフォームで事足りればありがたいのですが・・・

  • ACCESS2013 コンボボックスの警告について

    (1)コンボボックスに一度値を入力及び選択をして確定する。 (2)再度(1)のコンボボックスの内容を削除して空欄の状態に戻す。 (3)他のフィールド等にカーソル等を移すと、(2)のコンボボックスに対して警告メッセージが出でしまう。 'xxxxトランザクション.xxxxカラム'フィールドに値を入力してください。 上記(3)の警告メッセージが出ないようにしたいのですが どのように対応すればよろしいでしょうか? ※フォームはxxxxトランザクションがデータソース(ダイナセット)になっています。 ※コンボボックスはxxxxマスタテーブルが値集合(テーブル/クエリ)となっています。

  • [Access2003]コンボボックスのプロパティの「値集合タイプ」について

    [Access2003]コンボボックスのプロパティの「値集合タイプ」について 今、参考書でAccess2003のフォームのコントロールの作成について勉強しています。『コンボボックスのプロパティ』の「すべて」の中の「値集合タイプ」の・・・・ 「テーブル/クエリ」、「値リスト」、「フィールドリスト」は、少しの説明だけで理解できなかったです。 Access初心者なので簡潔に「テーブル/クエリ」、「値リスト」、「フィールドリスト」を教えてくださったら助かります。

専門家に質問してみよう