Evento ComboBox.NotInList (Access)

O evento NotInList ocorre quando o usuário insere um valor na parte da caixa de texto de uma caixa de combinação que não se encontra na lista da caixa de combinação.

Sintaxe

expressão. NotInList (NewData, Response)

Expressão Uma variável que representa um objeto ComboBox .

Parâmetros

Nome Obrigatório/Opcional Tipo de dados Descrição
NewData Obrigatório String Uma cadeia de caracteres que o Microsoft Access usa para passar o texto que o usuário inseriu na parte da caixa de texto da caixa de combinação para o procedimento de evento.
Response Obrigatório Integer A configuração indica como o evento NotInList foi tratado. O argumento Response pode ser uma das seguintes constantes intrínsecas:
  • acDataErrDisplay (Padrão) Exibe a mensagem padrão para o usuário. Use isso quando não quiser permitir que o usuário adicione um novo valor à lista de caixas de combinação.
  • acDataErrContinue Não exibe a mensagem padrão para o usuário. Use isso quando quiser exibir uma mensagem personalizada para o usuário. Por exemplo, o procedimento de evento pode exibir uma caixa de diálogo personalizada que pergunta se o usuário deseja salvar a nova entrada. Se a resposta for Sim, o procedimento de evento adicionará a nova entrada à lista e definirá o argumento Response como acDataErrAdded. Se a resposta for Não, o procedimento de evento definirá o argumento Response como acDataErrContinue.
  • acDataErrAdded Não exibe uma mensagem para o usuário, mas permite adicionar a entrada à lista da caixa de combinação no procedimento de evento NotInList. Depois que a entrada é adicionada, o Access atualiza a lista consultando novamente a caixa de combinação. O Access então verifica novamente a cadeia de caracteres na lista de caixas de combinação e salva o valor no argumento NewData no campo ao qual a caixa de combinação está vinculada. Se a cadeia de caracteres não estiver na lista, o Access exibirá uma mensagem de erro.

Comentários

Para executar uma macro ou procedimento de evento quando esse evento ocorrer, defina a propriedade OnNotInList como o nome da macro ou para [Procedimento de Evento].

Esse evento permite que o usuário adicione um novo valor à lista da caixa de combinação.

A propriedade LimitToList deve ser definida como Sim para que o evento NotInList ocorra.

O evento NotInList não dispara o evento Error .

O evento NotInList ocorre para caixas de combinação cuja propriedade LimitToList está definida como Sim, depois de você inserir um valor que não está na lista e tentar ir para outro controle ou salvar o registro. O evento ocorre após todos os eventos Change da caixa de combinação.

Quando a propriedade AutoExpand é definida como Sim, o Access seleciona valores correspondentes na lista à medida que o usuário insere caracteres na parte da caixa de texto da caixa de combinação. Se os caracteres que os tipos de usuário correspondem aos primeiros caracteres de um valor na lista (por exemplo, o usuário digita "Smith" e "Smithson" é um valor na lista), o evento NotInList não ocorrerá quando o usuário se mover para outro controle ou salvar o registro. No entanto, os caracteres que o Access adiciona aos caracteres que o usuário digita (no exemplo , "filho") são selecionados na parte da caixa de texto da caixa de combinação. Se o usuário quiser que o evento NotInList seja acionado nesses casos (por exemplo, o usuário deseja adicionar o novo nome "Smith" à lista de caixas de combinação), o usuário poderá inserir um caractere Space, Backspace ou Delete após o último caractere no novo valor.

Quando a propriedade LimitToList é definida como Sim e a lista de caixas de combinação é descartada, o Access seleciona valores correspondentes na lista à medida que o usuário insere caracteres na parte da caixa de texto da caixa de combinação, mesmo que a propriedade AutoExpand seja definida como No. Se o usuário pressionar Enter ou mover para outro controle ou registro, o valor selecionado será exibido na caixa de combinação. Nesse caso, o evento NotInList não será disparado. Para permitir que o evento NotInList seja disparado, o usuário não deverá suspender a lista da caixa de combinação.

Exemplo

O exemplo a seguir usa o evento NotInList para adicionar um item a uma caixa de combinação.

Para testar esse exemplo, crie uma caixa de combinação chamada Cores em um formulário. Defina a propriedade LimitToList da caixa de combinação como Sim. Para popular a caixa de combinação, defina a propriedade RowSourceType dela como Value List e forneça uma lista de valores separados por ponto-e-vírgula como a configuração da propriedade RowSource. Por exemplo, você pode fornecer os seguintes valores como a configuração para esta propriedade: Vermelho; Verde; Azul.

Em seguida, adicione o seguinte procedimento de evento ao formulário. Passe para o modo Formulário e insira um novo valor na parte de texto da caixa de combinação.

Observação

[!OBSERVAçãO] This example adds an item to an unbound combo box. When you add an item to a bound combo box, you add a value to a field in the underlying data source. Na maioria dos casos, você não pode simplesmente adicionar um campo em um novo registro; dependendo da estrutura de dados na tabela, você provavelmente precisará adicionar um ou mais campos para atender aos requisitos de dados. Por exemplo, um novo registro deve incluir valores para todos os campos que compõem a chave primária. Se você precisar adicionar itens a uma caixa de combinação vinculada dinamicamente, solicitará que o usuário insira dados para todos os campos necessários, salve o novo registro e, em seguida, reensofa a caixa de combinação para exibir o novo 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

O exemplo a seguir mostra como usar o evento NotInList para adicionar um item a uma caixa de combinação acoplada.

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

O exemplo a seguir mostra como adicionar um item a uma caixa de combinação associada.

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

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.