VBA Caixa de Listagem – Item Selecionado
In this Article
Este artigo demonstrará como trabalhar com o item selecionado em uma caixa de listagem no Excel VBA.
As caixas de listagem mostram uma lista de opções aos usuários, permitindo que eles selecionem um ou mais itens. Elas são muito usadas em formulários VBA, mas também podem ser usadas em sua planilha do Excel.
Criar Caixa de Listagem em um Formulário VBA
Para criar uma caixa de listagem em um formulário VBA, primeiro precisamos criar o UserForm.
Depois de criar o formulário, selecione o controle List Box na caixa de ferramentas e arraste-o para criar uma caixa de listagem no formulário.
Adicionar Valores à Caixa de Listagem
No evento Initialize do formulário, digite o seguinte código. A caixa de listagem pegará os valores armazenados em um intervalo de células em sua planilha do Excel.
Private Sub UserForm_Initialize()
Dim rng As Range
For Each rng In Range("A1:A50")
Me.lstState.AddItem rng.Value
Next rng
End Sub
Quando executarmos o formulário, a caixa de listagem será exibida conforme demonstrado na imagem abaixo:
Selecionar Valores na Caixa de Listagem
Por padrão, um único valor pode ser selecionado em uma caixa de listagem em um formulário de usuário. No entanto, isso pode ser alterado com a mudança da propriedade Multi-Select da caixa de listagem.
Clique na caixa de listagem para selecioná-la e, na janela Propriedades, altere a propriedade Multi-Select (Seleção múltipla) de 0-frmMultiSelectSingle para 1-frmMultiSelectMulti.
Agora, quando executarmos o formulário, poderemos selecionar mais de uma opção na caixa de listagem.
Se alterarmos a opção para 2-frmMultiSelectExtended, isso significa que podemos selecionar um dos valores e, em seguida, mantendo pressionada a tecla SHIFT, selecionar outro valor mais abaixo na lista, e todos os itens entre os dois valores selecionados também serão selecionados.
Trabalhar com os Valores Selecionados no VBA
Dependendo do tipo de opção que usamos para a propriedade Multi-Select na caixa de listagem, há várias maneiras de usar o valor ou os valores selecionados na caixa de listagem no código VBA.
Atribuição do Valor a uma Variável
Podemos usar o evento After_Update da caixa de listagem para atribuir o valor selecionado a uma variável.
Primeiramente, vamos criar uma variável de nível de módulo na parte superior do módulo do formulário.
Abaixo das palavras Option Explicit, crie a seguinte variável tipo String.
Dim strState as String.
Depois de criar essa variável, podemos clicar duas vezes na caixa Lista para acessar o código por trás do formulário ou podemos clicar no botão de código no VBE Editor.
O evento de clique da caixa de listagem será criado automaticamente. Selecione o evento After_Update na lista de procedimentos disponíveis.
No evento After_Update, digite o seguinte código:
Private Sub lstState_AfterUpdate()
strState = Me.lstState
End Sub
OBSERVAÇÃO: Você pode excluir o evento Click, pois ele não é necessário.
Agora, se executarmos o formulário e clicarmos na caixa de listagem, o valor selecionado será armazenado na variável. Para testar isso, podemos colocar um ponto de INTERRUPÇÃO no código.
Agora, quando executarmos o formulário, se clicarmos na caixa de listagem, o código entrará no modo DEBUG e parará em nosso ponto de interrupção. Se, em seguida, pressionarmos F8 no teclado para avançar uma etapa no código, a variável será preenchida com o item selecionado na lista.
Podemos visualizar esse valor colocando o mouse sobre a variável.
OU
Podemos visualizar o valor na janela Verificação Imediata.
Usar um Botão de Comando para Retornar o Valor ao Excel
Primeiramente, criamos um botão de comando no formulário para ter um botão OK para retornar o valor ou os valores selecionados na caixa de listagem para o Excel.
Selecione o controle Botão de Comando e, em seguida, clique e arraste no formulário para criar o botão.
Na janela Propriedades, altere o nome do botão para cmdOK e altere a Caption (Legenda) e o Accelerator (Acelerador) do botão.
O objetivo do Acelerador é que o usuário use o teclado para ativar o botão; nesse caso, Alt+O ativaria o botão.
Para que o botão de comando funcione, precisamos adicionar código por trás dele para que, quando o botão for clicado, o código seja executado. Isso é chamado de evento Click do botão.
Para acessar o evento de clique, clique duas vezes no botão na visualização de design do formulário. O evento de clique será criado automaticamente, pois esse é o evento mais comumente usado para botões de comando.
Digite o seguinte código no evento de clique do botão de comando.
Private Sub cmdOK_Click()
Range("E1") = strState
End Sub
O código pegará a variável que declaramos no evento After_Update do ListBox e retornará o valor para o intervalo no Excel.
Como alternativa, podemos pegar o valor diretamente da caixa de listagem sem usar uma variável.
Private Sub cmdOK_Click()
Range("E1") = me.lstState
End Sub
Quando executarmos o formulário, o valor selecionado será retornado ao Excel quando clicarmos no botão OK.
Selecionar Vários Valores
Se tivermos definido a propriedade de seleção múltipla da caixa de listagem como 1 ou 2, o que nos permite selecionar vários valores na lista, o código para selecionar esses valores será ligeiramente diferente.
O evento After_Update não é mais disparado quando selecionamos os valores na caixa de listagem – portanto, não podemos usar esse evento.
Ainda podemos usar o evento de clique do botão de comando, mas precisamos percorrer os valores selecionados na caixa de listagem para retorná-los ao Excel.
No evento Click do botão de comando, digite o seguinte código.
Private Sub cmdOK_Click()
Dim x As Integer
Range("E1").Select
For x = 0 To Me.lstState.ListCount - 1
If Me.lstState.Selected(x) = True Then
ActiveCell = Me.lstState.List(x)
ActiveCell.Offset(1, 0).Select
End If
Next x
End Sub
Agora, quando executarmos o formulário, somente os valores selecionados serão retornados à planilha do Excel.