向绑定组合框添加值

组合框常用于在表或查询中显示值的列表。 通过响应 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。