Evento ComboBox.NotInList (Access)

El evento NotInList se produce cuando el usuario escribe en el cuadro de texto de un cuadro combinado un valor que no se encuentra en la lista del cuadro combinado.

Sintaxis

expresión. NotInList (NewData, Response)

Expresión Variable que representa un objeto ComboBox .

Parameters

Nombre Obligatorio/opcional Tipo de datos Descripción
NewData Obligatorio String Cadena que Microsoft Access usa para pasar el texto especificado por el usuario en la parte del cuadro de texto del cuadro combinado al procedimiento de evento.
Respuesta Obligatorio Integer El valor indica cómo se controló el evento NotInList. El argumento Response puede ser una de las siguientes constantes intrínsecas:
  • acDataErrDisplay (valor predeterminado): muestra el mensaje predeterminado al usuario. Úsenlo cuando no quiera permitir que el usuario agregue un nuevo valor a la lista de cuadros combinados.
  • acDataErrContinue: no muestra el mensaje predeterminado al usuario. Úselo cuando desee mostrar un mensaje personalizado al usuario. Por ejemplo, el procedimiento de evento puede mostrar un cuadro de diálogo personalizado en el que se pregunta si el usuario quiere guardar la nueva entrada. Si la respuesta es Sí, el procedimiento de evento agregará la nueva entrada a la lista y establecerá el argumento Response en acDataErrAdded. Si la respuesta es No, el procedimiento de evento establecerá el argumento Response en acDataErrContinue.
  • acDataErrAdded: no muestra ningún mensaje al usuario pero permite agregar la entrada a la lista del cuadro combinado en el procedimiento de evento NotInList. Una vez agregada la entrada, Access actualiza la lista volviendo a consultar el cuadro combinado. A continuación, Access vuelve a comprobar la cadena en la lista de cuadros combinados y guarda el valor en el argumento NewData del campo al que está enlazado el cuadro combinado. Si la cadena no está en la lista, Access muestra un mensaje de error.

Comentarios

Para ejecutar una macro o un procedimiento de evento cuando se produzca este evento, establezca la propiedad OnNotInList en el nombre de la macro o en [Procedimiento de evento].

Este evento permite al usuario agregar un nuevo valor a la lista del cuadro combinado.

La propiedad LimitToList debe establecerse en Sí para que se produzca el evento NotInList .

El evento NotInList no desencadena el evento Error .

El evento NotInList se produce para los cuadros combinados cuya propiedad LimitToList tiene el valor Sí después de especificar un valor no incluido en la lista e intentar pasar a otro control o guardar el registro. El evento ocurre después de todos los eventos Change del cuadro combinado.

Cuando la propiedad AutoExpand se establece en Sí, Access selecciona los valores coincidentes de la lista a medida que el usuario escribe caracteres en la parte del cuadro de texto del cuadro combinado. Si los caracteres que el usuario escribe coinciden con los primeros caracteres de un valor de la lista (por ejemplo, los tipos de usuario "Smith" y "Smithson" son un valor de la lista), el evento NotInList no se producirá cuando el usuario se mueva a otro control o guarde el registro. Sin embargo, los caracteres que Access agrega a los caracteres que el usuario escribe (en el ejemplo, "son") se seleccionan en la parte del cuadro de texto del cuadro combinado. Si el usuario quiere que el evento NotInList se active en estos casos (por ejemplo, el usuario quiere agregar el nuevo nombre "Smith" a la lista de cuadros combinados), el usuario puede escribir un carácter Space, Backspace o Delete después del último carácter del nuevo valor.

Cuando la propiedad LimitToList se establece en Sí y la lista de cuadros combinados se coloca, Access selecciona los valores coincidentes de la lista a medida que el usuario escribe caracteres en la parte del cuadro de texto del cuadro combinado, incluso si la propiedad AutoExpand está establecida en No. Si el usuario presiona Entrar o se mueve a otro control o registro, el valor seleccionado aparece en el cuadro combinado. En este caso, el evento NotInList no se producirá. Para que el evento NotInList se produzca, el usuario no debe desplegar la lista del cuadro combinado.

Ejemplo:

En el ejemplo siguiente se usa el evento NotInList para agregar un elemento a un cuadro combinado.

Para probar este ejemplo, cree un cuadro combinado denominado Colors (Colores) en un formulario. Establezca en Sí la propiedad LimitToList del cuadro combinado. Para rellenar el cuadro combinado, establezca en Lista de valores la propiedad RowSourceType del cuadro combinado y proporcione una lista de valores separados por caracteres de punto y coma en el valor de la propiedad RowSource. Por ejemplo, puede proporcionar los siguientes valores como la configuración de esta propiedad: Red; Verde; Azul.

A continuación, agregue al formulario el procedimiento de evento siguiente. Cambie a la vista Formulario y especifique un nuevo valor en la parte del cuadro combinado correspondiente al texto.

Nota:

En este ejemplo se agrega un elemento a un cuadro combinado independiente. Cuando se agrega un elemento a un cuadro combinado dependiente, se agrega un valor a un campo en el origen de datos subyacente. En la mayoría de los casos, no se puede agregar simplemente un campo en un registro nuevo; En función de la estructura de los datos de la tabla, es probable que tenga que agregar uno o varios campos para cumplir los requisitos de datos. Por ejemplo, un nuevo registro debe incluir valores para cualquier campo que incluya la clave principal. Si necesita agregar elementos a un cuadro combinado dependiente de forma dinámica, deberá solicitar al usuario que escriba datos en todos los campos requeridos, guardar el nuevo registro y luego volver a consultar el cuadro combinado para que aparezca el nuevo valor.

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

En el ejemplo siguiente se ve cómo usar el evento NotInList para agregar un elemento a un cuadro combinado dependiente.

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

En el ejemplo siguiente se muestra cómo agregar un elemento a un cuadro combinado enlazado.

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

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.