コンボ ボックスは一般に、テーブルまたはクエリで値のリストを表示するために使用されます。 NotInList イベントに応答することにより、リストにない値を追加する手段をユーザーに提供することができます。
コンボ ボックスに表示される値は多くの場合、関連テーブル内のレコードから取得されます。 リストはテーブルまたはクエリから派生するため、基礎となるテーブルに新しいレコードを入力する手段をユーザーに提供する必要があります。 その後、Requery メソッドを使用してリストを再クエリし、新しい値をリストに取り込むことができます。
リストにない値をユーザーがコンボ ボックスに入力したとき、コンボ ボックスの "LimitToList/入力チェック" プロパティが [Yes/はい] に設定されていればコンボ ボックスの NotInList イベントが発生し、そうでない場合はコンボ ボックスの連結された列以外の列がボックスに表示されます。 NotInList イベントのイベント プロシージャを記述することにより、リストの値を供給するテーブルに新しいレコードを追加する手段をユーザーに提供できます。 NotInList イベント プロシージャには、ユーザーが入力したテキストをイベント プロシージャに渡すために Access が使用する、NewData という名前の文字列引数が含まれます。
NotInList イベント プロシージャには、プロシージャ実行後の Access の処理を指定する Response 引数もあります。 イベント プロシージャで行う処理に応じて、Response 引数には次の 3 つの定義済み定数値のいずれかを設定します。
定数 | 説明 |
---|---|
acDataErrAdded | イベント プロシージャでリストのレコード ソースに新しい値を入力するか、またはユーザーがその入力を行うための手段を提供する場合、Response 引数を acDataErrAdded に設定します。 入力後、Access はコンボ ボックスを自動的に再クエリし、新しい値をリストに追加します。 |
acDataErrDisplay | 新しい値を追加せず、Access で既定のエラー メッセージを表示する場合は、 Response 引数を acDataErrDisplay に設定します。 Access はリストにある有効な値の入力をユーザーに求めるメッセージを表示します。 |
acDataErrContinue | イベント プロシージャで独自のメッセージを表示する場合、Response 引数を acDataErrContinue に設定します。 Access は既定のエラー メッセージを表示しませんが、引き続きフィールドに値を入力するようユーザーに求めます。 ユーザーがリストから既存の値を選択したくない場合は、Undo メソッドを使用してフィールドの変更を 元に戻 すことができます。 |
たとえば、次のイベント プロシージャは、リストに値を追加するかどうかをユーザーに確認し、値を追加します。最後に Response 引数を使用して、リストを再クエリするよう Access に指示します。
Private Sub ShipperID_NotInList(NewData As String, Response As Integer)
Dim dbsOrders As DAO.Database
Dim rstShippers As DAO.Recordset
Dim intAnswer As Integer
On Error GoTo ErrorHandler
intAnswer = MsgBox("Add " & NewData & " to the list of shippers?", _
vbQuestion + vbYesNo)
If intAnswer = vbYes Then
' Add shipper stored in NewData argument to the Shippers table.
Set dbsOrders = CurrentDb
Set rstShippers = dbsOrders.OpenRecordset("Shippers")
rstShippers.AddNew
rstShippers!CompanyName = NewData
rstShippers.Update
Response = acDataErrAdded ' Requery the combo box list.
Else
Response = acDataErrDisplay ' Require the user to select
' an existing shipper.
End If
rstShippers.Close
dbsOrders.Close
Set rstShippers = Nothing
Set dbsOrders = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。