Событие ComboBox.NotInList (Access)
Событие NotInList возникает, когда пользователь вводит значение в текстовом поле поля со списком, которое отсутствует в списке полей со списком.
Синтаксис
expression. NotInList (NewData, Response)
Выражение Переменная, представляющая объект ComboBox .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
NewData | Обязательный | String | Строка, которую Microsoft Access использует для передачи текста, введенного пользователем в текстовом поле поля со списком, в процедуру события. |
Отклик | Обязательный | Integer | Параметр указывает, как было обработано событие NotInList . Аргумент Response может быть одной из следующих встроенных констант:
|
Замечания
Чтобы запустить макрос или процедуру события при возникновении этого события, задайте для свойства OnNotInList имя макроса или [Процедура события].
Это событие позволяет пользователю добавить новое значение в список со списком.
Чтобы произошло событие NotInList, свойство LimitToList должно иметь значение Да.
Событие NotInList не активирует событие Error .
Событие NotInList возникает для полей со списком, свойство LimitToList которых имеет значение Да, после ввода значения, которого нет в списке, и попытки перейти к другому элементу управления или сохранить запись. Событие возникает после всех событий Изменения для поля со списком.
Если для свойства AutoExpand задано значение Да, Access выбирает соответствующие значения в списке, когда пользователь вводит символы в текстовом поле поля со списком. Если символы, которые вводит пользователь, соответствуют первым символам значения в списке (например, пользователь вводит "Smith", а "Smithson" является значением в списке), событие NotInList не будет возникать, когда пользователь переходит к другому элементу управления или сохраняет запись. Однако символы, добавляемые Access к символам, которые пользователь вводит (в примере "сын"), выбираются в текстовом поле поля со списком. Если пользователь хочет, чтобы в таких случаях срабалось событие NotInList (например, пользователь хочет добавить новое имя Smith в список полей со списком), пользователь может ввести символ Пробел, Backspace или Delete после последнего символа в новом значении.
Если для свойства LimitToList задано значение Да, а список со списком выпадает, Access выбирает соответствующие значения в списке, когда пользователь вводит символы в текстовом поле поля со списком, даже если для свойства AutoExpand задано значение Нет. Если пользователь нажимает клавишу ВВОД или переходит к другому элементу управления или записи, выбранное значение появится в поле со списком. В этом случае событие NotInList не срабатывает. Чтобы разрешить событие NotInList , пользователь не должен раскрывать список со списком.
Пример
В следующем примере событие NotInList используется для добавления элемента в поле со списком.
Чтобы попробовать этот пример, создайте поле со списком с именем Colors в форме. Задайте для свойства LimitToList поля со списком значение Да. Чтобы заполнить поле со списком, задайте для свойства RowSourceType поля со списком значение Список значений и укажите список значений, разделенных точкой с запятой, в качестве параметра свойства RowSource . Например, в качестве параметра для этого свойства можно указать следующие значения: 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 и обратная связь.