Adicionar um valor a uma caixa de combinação associada

Normalmente, as caixas de combinação são usadas para exibir uma lista dos valores de uma tabela ou consulta. Ao responder ao evento NotInList, você pode oferecer uma maneira de o usuário adicionar valores que não estão na lista.

Normalmente, o valor exibido em uma caixa de combinação é extraído de um registro de uma tabela relacionada. Como a lista é derivada de uma tabela ou consulta, você deve fornecer uma maneira de o usuário inserir um novo registro na tabela de base. Em seguida, você pode usar o método Requery para consultar novamente a lista, que conterá o novo valor.

Quando um usuário digita um valor em uma caixa de combinação que não está na lista, o evento NotInList da caixa de combinação ocorre, desde que a propriedade LimitToList dela esteja definida como Yes ou outra coluna que não seja a vinculada seja exibida na caixa. Você pode gravar um procedimento de evento para o evento NotInList que forneça uma maneira de o usuário adicionar um novo registro à tabela que forneça os valores da lista. O procedimento de evento NotInList inclui um argumento de cadeia de caracteres chamado NewData que o Access usa para passar o texto que o usuário insere no procedimento de evento.

O procedimento de evento NotInList também tem um argumento Response que informa ao Access o que fazer após a execução do procedimento. Dependendo da ação executada no procedimento de evento, você pode definir o argumento Response como um destes valores de constantes predefinidos:

Constante Descrição
acDataErrAdded Se o procedimento de evento insere o novo valor na fonte de registros da lista ou fornece uma maneira de o usuário fazer isso, defina o argumento Response como acDataErrAdded. O Access consultará então a caixa de combinação novamente para você, adicionado o novo valor à lista.
acDataErrDisplay Se você não adicionar o novo valor e quiser que o Access exiba a mensagem de erro padrão, defina o argumento Resposta como acDataErrDisplay. O Access pedirá para o usuário inserir um valor válido da lista.
acDataErrContinue Se você exibe sua própria mensagem no procedimento de evento, defina o argumento Response como acDataErrContinue. O Access não exibirá sua mensagem de erro padrão, mas pedirá para o usuário inserir um valor no campo. Se você não quiser que o usuário selecione um valor existente na lista, poderá desfazer as alterações no campo usando o método Desfazer .

Por exemplo, o procedimento de evento a seguir pergunta para o usuário se deve ou não adicionar um valor à lista, adiciona o valor e usa o argumento Response para pedir para o Access consultar novamente a lista:

Private Sub ShipperID_NotInList(NewData As String, Response As Integer)

   Dim dbsOrders As DAO.Database
   Dim rstShippers As DAO.Recordset
   Dim intAnswer As Integer

On Error GoTo ErrorHandler

   intAnswer = MsgBox("Add " & NewData & " to the list of shippers?", _
      vbQuestion + vbYesNo)

   If intAnswer = vbYes Then

      ' Add shipper stored in NewData argument to the Shippers table.
      Set dbsOrders = CurrentDb
      Set rstShippers = dbsOrders.OpenRecordset("Shippers")
      rstShippers.AddNew
      rstShippers!CompanyName = NewData
      rstShippers.Update

      Response = acDataErrAdded         ' Requery the combo box list.
   Else
      Response = acDataErrDisplay       ' Require the user to select
                                        ' an existing shipper.
   End If

   rstShippers.Close
   dbsOrders.Close

   Set rstShippers = Nothing
   Set dbsOrders = Nothing

   Exit Sub

ErrorHandler:
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
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.