- ベストアンサー
リスト外入力
アクセス2002を使っています。 フォームでコンボボックスを使用し一覧から選択できるようにしたのですが、一覧にない文字列を入力しようとすると「一覧から選択して下さい」とメッセージが出て入力できません。 一覧にない文字列も入力できるようにしたいのですが、どなたか教えていただけませんか? フォームのプロパティで「リスト外入力」という項目がありますが、このプロシジャでマクロを設定すればできるのでしょうか? よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
再びmaruru01です。 NotInListイベントに第2引数Responseに、処理状態の値をセットしなければいけません。 追加の値は、acDataErrAddedです。 したがって、 Set rst = New ADODB.Recordset の前に、 Response = acDataErrAdded を追加して下さい。
その他の回答 (1)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 コンボボックスの[入力チェック]プロパティが"はい"になっていませんか。 "はい"の場合は、リストにないデータを入力出来ませんので、"いいえ"にして下さい。 ただし、リストに新しいデータを追加する場合は、[入力チェック]を"はい"にして、[リスト外入力]イベントにそれを記述します。 NotInListイベントプロシージャのヘルプに、リストに追加する例が載っています。 ただし、これは、リスト項目を[値集合ソース]プロパティに直接、"赤;青;白"などと入れる場合です。 リストをどこかのテーブルから引っ張っている場合は、テーブルにその値を追加して、コンボボックスのRequeryメソッドで再クエリする必要があります。
補足
早速のアドバイス有難うございます。 質問を出した後によくよくQ&Aを読むと似たようなご質問が過去にありました。その回答によれば、「リスト外入力時イベント」に下記を記述すれば良いとのことでした。 早速やってみまたのですが、うまくいきません。 コンボボックスに入力した新しいデータは、リストの最後に新規登録はされるのですが、「リストにありません。リストから選択して...」というメッセージが出ます。 なぜでしょうか。 (記述は下記の通りです) Private Sub 品名_NotInList(NewData As String, Response As Integer) Dim rst As New ADODB.Recordset Set rst = New ADODB.Recordset rst.Open "T仕入品名", CurrentProject.Connection, adOpenKeyset, adLockOptimistic rst.AddNew rst! 仕入品名 = NewData rst.Update rst.Close Set rst = Nothing Me.品名 = "" Me.品名.Requery End Sub お願いします。
お礼
有難うございました。 うまく新規入力・登録が出来るようになりました。 今後もよろしくお願いします!