Добавление значения в привязанное поле со списком
Поля со списками обычно используются для отображения списка значений в таблице или запросе. Отвечая на событие 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 и обратная связь.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по