Поделиться через


Событие ComboBox.NotInList (Access)

Событие NotInList возникает, когда пользователь вводит значение в текстовом поле поля со списком, которое отсутствует в списке полей со списком.

Синтаксис

expression. NotInList (NewData, Response)

Выражение Переменная, представляющая объект ComboBox .

Параметры

Имя Обязательный или необязательный Тип данных Описание
NewData Обязательный String Строка, которую Microsoft Access использует для передачи текста, введенного пользователем в текстовом поле поля со списком, в процедуру события.
Отклик Обязательный Integer Параметр указывает, как было обработано событие NotInList . Аргумент Response может быть одной из следующих встроенных констант:
  • acDataErrDisplay (по умолчанию) Отображает сообщение по умолчанию для пользователя. Используйте его, если вы не хотите разрешать пользователю добавлять новое значение в список полей со списком.
  • acDataErrContinue Не отображает сообщение по умолчанию для пользователя. Используйте его, если вы хотите отобразить пользовательское сообщение для пользователя. Например, процедура события может отображать пользовательское диалоговое окно с запросом, хочет ли пользователь сохранить новую запись. Если ответ имеет значение Да, процедура события добавит новую запись в список и присвоит аргументу Responseзначение acDataErrAdded. Если для ответа задано значение Нет, процедура события установит для аргумента Responseзначение acDataErrContinue.
  • acDataErrAdded Не отображает сообщение для пользователя, но позволяет добавить запись в список со списком в процедуре события NotInList . После добавления записи Access обновляет список, повторно запрашивая поле со списком. Затем Access повторно проверит строку в списке со списком и сохранит значение в аргументе NewData в поле, к которому привязано поле со списком. Если строки нет в списке, Access отображает сообщение об ошибке.

Замечания

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