ComboBox.NotInList 事件 (Access)
当用户输入的值不在组合框列表的组合框的文本框部分中,会发生 NotInList 事件。
语法
表达式。NotInList (NewData, 响应)
表达 一个代表 ComboBox 对象的变量。
参数
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
NewData | 必需 | 字符串 | Microsoft Access 使用的字符串,用于将用户在组合框的文本框部分输入的文本传递给事件过程。 |
响应 | 必需 | Integer | 设置指示如何 NotInList 事件已得到处理。 Response参数可以是下列固有常量之一:
|
备注
要在此事件发生时运行宏或事件过程,请将 OnNotInList 设置为宏的名称或 [事件过程]。
用户使用此事件可以将新值添加到组合框列表中。
限于列表 属性必须设置为是发生 NotInList 事件。
NotInList 事件不会触发 错误 事件。
组合框输入不在列表中的值,并尝试移动到另一个控件或保存记录后,其 限于列表 属性设置为是,会发生 NotInList 事件。 毕竟作为组合框的 Change 事件发生的事件。
当 AutoExpand 属性设置为“是”时,当用户在组合框的文本框部分输入字符时,Access 将在列表中选择匹配的值。 如果用户键入的字符与列表中的值的第一个字符匹配 (例如,用户类型“Smith”和“Smithson”是列表中的值) ,则当用户移动到另一个控件或保存记录时, NotInList 事件将不会发生。 但是,Access 添加到用户键入的字符 (在组合框的文本框部分选择了“son”) 。 如果用户希望在此类情况下触发 NotInList 事件 (例如,用户想要将新名称“Smith”添加到组合框列表) ,则用户可以在新值的最后一个字符之后输入空格、Backspace 或删除 字符。
当 LimitToList 属性设置为“是”并且组合框列表已下拉时,当用户在组合框的文本框部分输入字符时,Access 将在列表中选择匹配的值,即使 AutoExpand 属性设置为“否”。 如果用户按 Enter 或移动到另一个控件或记录,则所选值将显示在组合框中。 在这种情况下,将不会触发 NotInList 事件。 若要允许 NotInList 事件触发,用户应该不下拉组合框列表。
示例
以下示例使用 NotInList 事件向组合框中添加项。
要尝试此示例,请在窗体上创建一个名为 Colors 的组合框。 将组合框的 限于列表 属性设置为是。 若要填充的组合框,将组合框的 行来源类型 属性设置为值列表中,并提供由分号分隔的 行来源 属性设置为的值的列表。 例如,可以提供以下值作为此属性的设置:Red;绿色;蓝色。
然后,将以下事件过程添加到窗体中。 切换到窗体视图并在组合框的文本部分输入新值。
注意
此示例向未绑定的组合框添加了一项内容。 在向绑定的组合框添加项时,会将值添加到基本数据源的字段中。 在大多数情况下,不能简单地在新记录中添加一个字段;根据表中数据的结构,可能需要添加一个或多个字段来满足数据要求。 例如,新记录必须包含包含主键的任何字段的值。 如果需要将项动态添加到绑定组合框,则必须提示用户输入所有必填字段的数据,保存新记录,然后重新查询组合框以显示新值。
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 支持和反馈,获取有关如何接收支持和提供反馈的指南。