VBA Caixa de Listagem – Item Selecionado

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on June 6, 2023

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.

criar caixa listagem userform

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:

VBAListBox ShowList

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.

selecionar propriedade multiselect

 

Agora, quando executarmos o formulário, poderemos selecionar mais de uma opção na caixa de listagem.

VBAListBox MultiSelected

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.

VBAListBox MultiSelect Extended

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.

VBAListBox Select After Update

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.

 

VBAListBox BreakPoint

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.

VBAListBox BreakVariable

OU

Podemos visualizar o valor na janela Verificação Imediata.

valor selecionado caixa listagem

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.

adicionar botao comando

Na janela Propriedades, altere o nome do botão para cmdOK e altere a Caption (Legenda) e o Accelerator (Acelerador) do botão.

propriedades botao ok

O objetivo do Acelerador é que o usuário use o teclado para ativar o botão; nesse caso, Alt+O ativaria o botão.

VBAControls Button Accelerator

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.

VBAListBox 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.

VBAListBox_MultiSelect ReturnToExcel

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA