Partilhar via


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 que o Microsoft Access utiliza para transmitir o texto que o utilizador introduziu na parte da caixa de texto da caixa de combinação para o procedimento do 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. Utilize esta opção quando não quiser permitir que o utilizador adicione um novo valor à lista de caixas de combinação.
  • acDataErrContinue Não exibe a mensagem padrão para o usuário. Utilize esta opção quando quiser apresentar uma mensagem personalizada ao utilizador. 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. Após a entrada ser adicionada, o Access atualiza a lista consultando novamente a caixa de combinação. Em seguida, o Access verifica novamente a cadeia na lista de caixas de combinação e guarda o valor no argumento NewData no campo ao qual a caixa de combinação está vinculada. Se a cadeia não estiver na lista, o Access apresenta uma mensagem de erro.

Comentários

Para executar um procedimento de macro ou evento quando este evento ocorre, defina a propriedade OnNotInList para 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 tem de ser definida como Sim para que o evento NotInList ocorra.

O evento NotInList não aciona o evento Erro .

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 está definida como Sim, o Access seleciona valores correspondentes na lista à medida que o utilizador introduz carateres na parte da caixa de texto da caixa de combinação. Se os carateres que os tipos de utilizador correspondem aos primeiros carateres de um valor na lista (por exemplo, os tipos de utilizador "Smith" e "Smithson" forem um valor na lista), o evento NotInList não ocorrerá quando o utilizador mudar para outro controlo ou guardar o registo. No entanto, os carateres que o Access adiciona aos carateres que o utilizador escreve (no exemplo, "filho") estão selecionados na parte da caixa de texto da caixa de combinação. Se o utilizador quiser que o evento NotInList seja acionado nesses casos (por exemplo, o utilizador quer adicionar o novo nome "Smith" à lista de caixas de combinação), o utilizador pode introduzir um espaço, retrocesso ou eliminar caráter após o último caráter no novo valor.

Quando a propriedade LimitToList está definida como Sim e a lista de caixas de combinação é removida, o Access seleciona valores correspondentes na lista à medida que o utilizador introduz carateres na parte da caixa de texto da caixa de combinação, mesmo que a propriedade AutoExpand esteja definida como Não. Se o utilizador premir Enter ou mudar para outro controlo ou registo, o valor selecionado é apresentado 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, pode fornecer os seguintes valores como a definição para esta propriedade: Vermelho; Verde; Azul, 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, não pode simplesmente adicionar um campo num novo registo; consoante a estrutura dos dados na tabela, provavelmente terá de adicionar um ou mais campos para cumprir os requisitos de dados. Por exemplo, um novo registo tem de incluir valores para quaisquer campos que incluam a chave primária. Se precisar de adicionar itens a uma caixa de combinação vinculada dinamicamente, tem de pedir ao utilizador para introduzir dados para todos os campos necessários, guardar o novo registo e, em seguida, voltar a consultar a caixa de combinação para apresentar 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.