组合框常用于在表或查询中显示值的列表。 通过响应 NotInList 事件,可以为用户提供一种添加列表中不存在的值的方法。
通常,显示在组合框中的值是从相关表的记录中查阅的。 由于列表是从表或查询派生的,因此必须为用户提供在基本表中输入新记录的方法。 然后可以使用 Requery 方法重新查询列表,这样该列表就包含了新值。
当用户在组合框中键入列表中不存在的值时,只要将该组合框的 LimitToList 属性设置为“是”,或者除组合框的绑定列以外的某个列显示在框中,就会发生组合框的 NotInList 事件。 您可以为 NotInList 事件编写一个事件过程,该过程可以为用户提供向提供列表值的表中添加新记录的方法。 NotInList 事件过程包括一个名为 NewData 的字符串参数,Access 使用该参数将用户输入的文本传递到该事件过程。
NotInList 事件过程还有一个 Response 参数,您可以通过它告诉 Access 在过程运行后应执行什么操作。 根据您在事件过程中采取的操作,可以将 Response 参数设置为三个预定义常量值中的一个:
常量 | 说明 |
---|---|
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 支持和反馈,获取有关如何接收支持和提供反馈的指南。