ComboBox.NotInList イベント (Access)
NotInList イベントは、コンボ ボックスで、リスト ボックス部分に含まれていない値をテキスト ボックス部分に入力したときに発生します。
構文
式。NotInList (NewData、 Response)
式ComboBox オブジェクトを表す変数。
パラメーター
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
NewData | 必須 | String | Microsoft Access が、ユーザーがコンボ ボックスのテキスト ボックス部分に入力したテキストをイベント プロシージャに渡すために使用する文字列。 |
Response | 必須 | 整数型 (Integer) | この設定は、 NotInList イベントがどのように処理されたかを示します。 引数 Response には、次の組み込み定数のいずれかを使用します。
|
注釈
このイベントが発生したときにマクロまたはイベント プロシージャを実行するには、 OnNotInList プロパティをマクロの名前または [イベント プロシージャ] に設定します。
NotInList イベントを使うと、コンボ ボックスに新しい値を追加できるようになります。
NotInList イベントを発生させるには、LimitToList プロパティを Yes に設定する必要があります。
NotInList イベントは Error イベントをトリガーしません。
NotInList イベントは、"LimitToList/入力チェック" プロパティが [Yes/はい] に設定されているコンボ ボックスに対してリストにない値を入力し、他のコントロールに移動するか、またはレコードを保存した後で発生します。 また、コンボ ボックスに対するすべての Change イベントの後で発生します。
AutoExpand プロパティが [はい] に設定されている場合、ユーザーがコンボ ボックスのテキスト ボックス部分に文字を入力すると、リスト内の一致する値が選択されます。 ユーザーが入力した文字がリスト内の値の最初の文字と一致する場合 (たとえば、ユーザーの型が "Smith"、"Smithson" がリスト内の値)、ユーザーが別のコントロールに移動したり、レコードを保存したりしたときに NotInList イベントは発生しません。 ただし、Access の文字は、ユーザーが入力した文字 (例では "son") に追加され、コンボ ボックスのテキスト ボックス部分で選択されます。 ユーザーがこのような場合に NotInList イベントを発生させたい場合 (たとえば、ユーザーが新しい名前 "Smith" をコンボ ボックス リストに追加する場合)、ユーザーは新しい値の最後の文字の後に Space、Backspace、または Delete 文字を入力できます。
LimitToList プロパティが [はい] に設定され、コンボ ボックス リストがドロップダウンされると、AutoExpand プロパティが [いいえ] に設定されている場合でも、ユーザーがコンボ ボックスのテキスト ボックス部分に文字を入力すると、リスト内の一致する値が選択されます。 ユーザーが Enter キーを押すか、別のコントロールまたはレコードに移動すると、選択した値がコンボ ボックスに表示されます。 この場合、 NotInList イベントは発生しません。 コンボ ボックス リストをドロップダウンしないときは、NotInList イベントが発生します。
例
次の例では、NotInList イベントを使用してコンボ ボックスにアイテムを追加します。
この例を試すには、フォームに Colors というコンボ ボックスを作成します。 コンボ ボックスの "LimitToList/入力チェック" プロパティを [Yes/はい] に設定します。 コンボ ボックスにデータを入力するには、コンボ ボックスの "RowSourceType/値集合タイプ" プロパティに [Value List/値リスト] を設定し、"RowSource/値集合ソース" プロパティの設定として、セミコロンで区切られた値のリストを指定します。 たとえば、このプロパティの設定として次の値を指定できます。緑;青。
次に、フォームに以下のイベント プロシージャを追加します。 フォーム ビューに切り替えて、コンボ ボックスのテキスト ボックス部分に新しい値を入力します。
注:
[!メモ] この例では、連結されていないコンボ ボックスに項目を追加します。 連結されているコンボ ボックスに項目を追加するときは、基になるデータ ソース内のフィールドに値を追加します。 ほとんどの場合、新しいレコードに 1 つのフィールドを追加することはできません。テーブル内のデータ構造によっては、データ要件を満たすために 1 つ以上のフィールドを追加する必要があります。 たとえば、新しいレコードには、主キーを構成するすべてのフィールドの値を含める必要があります。 連結されたコンボ ボックスにアイテムを動的に追加する必要がある場合は、すべての必要なフィールドにデータを入力し、新しいレコードを保存して、新しい値を表示するコンボ ボックスの再クエリを実行するようにユーザーに要求する必要があります。
Private Sub Colors_NotInList(NewData As String, _
Response As Integer)
Dim ctl As Control
' Return Control object that points to combo box.
Set ctl = Me!Colors
' Prompt user to verify they wish to add new value.
If MsgBox("Value is not in list. Add it?", _
vbOKCancel) = vbOK Then
' Set Response argument to indicate that data
' is being added.
Response = acDataErrAdded
' Add string in NewData argument to row source.
ctl.RowSource = ctl.RowSource & ";" & NewData
Else
' If user chooses Cancel, suppress error message
' and undo changes.
Response = acDataErrContinue
ctl.Undo
End If
End Sub
次の例では、NotInList イベントを使用して、連結されているコンボ ボックスにアイテムを追加する方法を示します。
Private Sub cboDept_NotInList(NewData As String, Response As Integer)
Dim oRS As DAO.Recordset, i As Integer, sMsg As String
Dim oRSClone As DAO.Recordset
Response = acDataErrContinue
If MsgBox("Add dept?", vbYesNo) = vbYes Then
Set oRS = CurrentDb.OpenRecordset("tblDepartments", dbOpenDynaset)
oRS.AddNew
oRS.Fields(1) = NewData
For i = 2 To oRS.Fields.Count - 1
sMsg = "What do you want for " & oRS(i).Name
oRS(i).Value = InputBox(sMsg, , oRS(i).DefaultValue)
Next i
oRS.Update
cboDept = Null
cboDept.Requery
DoCmd.OpenTable "tblDepartments", acViewNormal, acReadOnly
DoCmd.GoToRecord acDataTable, "tblDepartments", acLast
End If
End Sub
次の例では、連結されているコンボ ボックスにアイテムを追加する方法を示します。
Private Sub cboMainCategory_NotInList(NewData As String, Response As Integer)
On Error GoTo Error_Handler
Dim intAnswer As Integer
intAnswer = MsgBox("""" & NewData & """ is not an approved category. " & vbcrlf _
& "Do you want to add it now?" _ vbYesNo + vbQuestion, "Invalid Category")
Select Case intAnswer
Case vbYes
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tlkpCategoryNotInList (Category) "
& _ "Select """ & NewData & """;"
DoCmd.SetWarnings True
Response = acDataErrAdded
Case vbNo
MsgBox "Please select an item from the list.", _
vbExclamation + vbOKOnly, "Invalid Entry"
Response = acDataErrContinue
End Select
Exit_Procedure:
DoCmd.SetWarnings True
Exit Sub
Error_Handler:
MsgBox Err.Number & ", " & Error Description
Resume Exit_Procedure
Resume
End Sub
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。