ComboBox.NotInList 事件 (Access)

当用户输入的值不在组合框列表的组合框的文本框部分中,会发生 NotInList 事件。

语法

表达式NotInList (NewData响应)

表达 一个代表 ComboBox 对象的变量。

参数

名称 必需/可选 数据类型 说明
NewData 必需 字符串 Microsoft Access 使用的字符串,用于将用户在组合框的文本框部分输入的文本传递给事件过程。
响应 必需 Integer 设置指示如何 NotInList 事件已得到处理。 Response参数可以是下列固有常量之一:
  • acDataErrDisplay (默认值)向用户显示默认消息。 如果不希望允许用户将新值添加到组合框列表,请使用此选项。
  • acDataErrContinue 不会向用户显示默认消息。 如果要向用户显示自定义消息,请使用此选项。 例如,事件过程可以显示一个自定义对话框,询问用户是否要保存新条目。 如果响应是肯定的事件过程会向列表中添加新条目,将 Response参数设置为 acDataErrAdded 。 响应为否,如果该事件过程将设置为 acDataErrContinueResponse参数。
  • acDataErrAdded 不会向用户显示一条消息,但使您可以为 NotInList 事件过程中的组合框列表中添加条目。 添加条目后,Access 通过重新查询组合框来更新列表。 然后,Access 针对组合框列表重新检查字符串,并将值保存在组合框绑定到的字段中的 NewData 参数中。 如果该字符串不在列表中,Access 将显示一条错误消息。

备注

要在此事件发生时运行宏或事件过程,请将 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。