- ベストアンサー
コンボボックスの値が消えてしまいます。
コンボボックスの値が消えてしまいます。 フォーム(1)にコンボボックスA(値集合ソースはテーブル1)があります、この リスト外入力時で別フォーム(2)(レコード追加用)を開きテーブル1にレコードを追加、 フォーム(2)を閉じる時にコンボボックスAをリクエリかけてフォーム(1)に戻るとコンボボックスAが空になっているのでリストを開き選択し直さなければいけません! フォーム(1)に戻った時コンボボックスAに入力した値を選択させておくにはどの様にすれば良いか アドバイスよろしくお願いいたします。 WIN XP ACCESS 2003で作成しています。
- みんなの回答 (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 を押してブレークポインタを設定してみてもいいかもしれません。 いろいろとテストしてみてください。ご検討を祈ります。
その他の回答 (2)
- WOPR
- ベストアンサー率29% (38/131)
ちょ………っと美しくないコードなので恐縮ですが。 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 に入力した値を選択させておくことができました。
お礼
丁寧な説明ありがとうございます! 初心者の僕にも大変解りやすいです。 頂いたコードを記述してみましたが、コンボボックスにセット出来ません。自分のやり方がいけないと思うのですが・・・(T _T) 変数宣言の強制と変数の宣言が少しおかしい所で区切られてしまうと思うのですが、確認お願いします。 Option Compare Database Option Explicit Dim temp As String  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Private Sub Form_AfterInsert() temp = txt型式 End Sub  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じです、お手数お掛けします。 よろしくお願いいたします。
- WOPR
- ベストアンサー率29% (38/131)
はじめまして フォーム(2)を閉じるときに、コンボボックス A をリクエリして、その次に新しく追加されたレコードの値をセットされてはいかがですか。 Private Sub Form_Close() Forms("Form1").Controls("ComboBoxA").Requery Forms("Form1").Controls("ComboBoxA") = "あいうえお" End Sub こんな感じですか?
お礼
早急な返答ありがとうございます。 セットしたい値がtxt型式で追加しているので下記の感じで試してみたのですが やはりcmb型式は空でした。 Forms!F車検証.cmb型式.Requery Forms("F車検証").Controls("cmb型式") = "txt型式" の他に FormsF車検証".cmb型式 = txt型式 や Forms!F車検証.cmb型式=NewIndex など色々試したのですが、出来ません! cmbBoxに値を代入するにはtxtBoxの値を当てても駄目なんでしょうか? お力添えよろしくお願いいたします。
お礼
遅くなりましてすいません! ご教授ありがとうございます。 自分は本を読みあさりNETで必要なコードだけ拾って独学で顧客管理を作っているので 基本がシッカリ出来ていません・・・ ですのでWOPRさんに教えて頂いた"基本作業""労力をケチってはいけません"など大変為になります。 頂いた上記の事項を慌てず実行して行きたいと思います、丁重なレスありがとうございました。 また宜しくお願いいたします。