Добавление значения в привязанное поле со списком

Поля со списками обычно используются для отображения списка значений в таблице или запросе. Отвечая на событие NotInList, можно предоставить пользователю способ для добавления значений, которых нет в списке.

Часто значение, отображаемое в поле со списком, подставляется из записи в связанной таблице. Так как список создается из таблицы или запроса, необходимо предоставить пользователю способ ввода новой записи в базовой таблице. Затем можно использовать метод Requery, чтобы повторно запросить список, содержащий новое значение.

При вводе в поле со списком значения, которого нет в списке, возникает событие NotInList поля со списком, если свойству LimitToList поля со списком присвоено значение Да или столбец, кроме привязанного столбца поля со списком, отображается в поле. Можно создать процедуру обработки события NotInList, позволяющую пользователю добавлять новую запись в таблицу, из которой берутся значения списка. Процедура обработки события NotInList включает строковый аргумент NewData, который Access использует для передачи введенного пользователем текста процедуре обработки событий.

В процедуре обработки события NotInList также есть аргумент Response, с помощью которого можно сообщить Access необходимые действия после запуска процедуры. В зависимости от используемых действий в процедуре обработки событий, нужно присвоить аргументу Response одно из трех заранее определенных значений констант:

Константа Описание
acDataErrAdded Если процедура события вводит новое значение в источник записей для списка или предоставляет пользователю способ сделать это, задайте для аргумента Response значение acDataErrAdded. После этого Access повторно запрашивает поле со списком, добавляя новое значение в список.
acDataErrDisplay Если вы не добавили новое значение и хотите, чтобы Access отображал сообщение об ошибке по умолчанию, задайте для аргумента Responseзначение acDataErrDisplay. В Access требуется ввод пользователем допустимого значения из списка.
acDataErrContinue Если в процедуре события отображается собственное сообщение, задайте для аргумента Responseзначение acDataErrContinue. В Access не отображается стандартное сообщение об ошибке, но по-прежнему требуется, чтобы пользователь ввел значение в поле. Если вы не хотите, чтобы пользователь выбирал существующее значение из списка, можно отменить изменения поля с помощью метода Отмена .

Например, следующая процедура события задает пользователю вопрос о том, следует ли добавить значение в список, добавляет значение, а затем использует аргумент 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 и обратная связь.