Blog

Postado em em 15 de janeiro de 2021

Caixa de Listagem no VBA

ListBox (Caixa de Listagem)

Nesta aula vamos te ensinar o funcionamento da caixa de listagem no VBA, que é uma caixa para listar informações e facilitar a seleção dos dados!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber a planilha que usamos na aula no seu e-mail, preencha:

Essa é a décima quinta aula da nossa série de Controle de Estoque Completo no VBA, onde estaremos aprendendo a lidar com os eventos no formulário de controle de estoque, o principal, e no de controle de produtos, o auxiliar.

Nessa aula vamos:

  • Complementar o código responsável por atualizar os estoques com fórmulas do Excel e VBA associadas para atingir esse objetivo.

Como atualizar os estoques com fórmulas do Excel e VBA utilizando caixa de listagem?

O que queremos fazer é atualizar a caixa de listagem de transações à direita do nosso formulário de estoques, usando código em VBA associados para atingir esse objetivo. Para isso, teremos que:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque
  • Clicar com botão direito > Exibir código
  • Inserir o código abaixo como uma nova Sub dentro do formulário
atualiza_caixa_listagem_estoque()
.
.
.
Sheets("Caixa_Estoque").Cells.Clear
Sheets("Estoque").AutoFilterMode = False

If caixa_procurar.Value <> "" Then
    Sheets("Estoque").UsedRange.AutoFilter 1, "*" & caixa_procurar.Value & "*"
End If
Sheets("Estoque").UsedRange.Copy Sheets("Caixa_Estoque").Range("A1")
Sheets("Estoque").AutoFilterMode = False
linha = Sheets("Caixa_Estoque").Range("A1000000").End(xlUp).Row
If linha = 1 Then linha = 2
FormularioControleEstoque.caixa_listagem_estoque.ColumnCount = 4
FormularioControleEstoque.caixa_listagem_estoque.ColumnHeads = True
FormularioControleEstoque.caixa_listagem_estoque.ColumnWidths = "80;50;50;50"
FormularioControleEstoque.caixa_listagem_estoque.RowSource = "Caixa_Estoque!A2:D" & linha

Explicação dessa parte da sub atualiza_caixa_listagem_estoque():

  • A primeira parte nova do código complementar ao da última aula (exposto acima) irá limpar todas as células da aba “Caixa_Estoque”
  • Em seguida vamos desativar os filtros da aba de “Estoque”, por precaução e prevenção de erros
  • Depois, verificar uma condição: há algo escrito na caixa_procurar? Se sim (ou seja, algo escrito é diferente de vazio (“”)), faremos que o texto escrito na caixa_procurar seja válido para filtrar o intervalo de células preenchidas na aba “Estoque”, independentemente do que esteja escrito no começo ou no final (representado por *), uma parte do texto irá ser procurada
  • Então, iremos copiar essas informações filtradas pelo texto escrito na caixa_procurar, filtradas nas informações da tabela presente na aba “Estoque” e colá-las na célula A1 da aba de “Caixa_Estoque”
  • Iremos, em seguida, desfiltrar as informações na aba de “Estoque”, para que ela volte ao normal, e por precaução
  • Após isso, precisamos descobrir a última linha preenchida da aba de “Caixa_Estoque”, que nos fornecerá o tamanho da tabela que iremos mostrar na caixa listagem de estoque, que será armazenada na variável “linha”
  • Para uma correção de bug, faremos a linha, se a variável linha for igual a 1, ou seja, nada estiver preenchido na aba “Caixa_Estoque”, e só tivermos o cabeçalho, faremos com que a linha assuma valor 2, para que a nossa caixa de listagem não fique bugada, como mostrado no vídeo
  • Definiremos o que aparecerá na nossa caixa de listagem, que serão 4 colunas; cabeçalho existente (True), as larguras das colunas mostradas na caixa de listagem (80, 50, 50, 50), e a fonte de dados irá da célula A2 até a última linha da coluna D (dada pela variável “linha”)
  • Encerra-se a nossa macro

Esse código sozinho não é suficiente para atualizar a nossa caixa de listagem. Ele deve ser atrelado a eventos.

Ele será chamado quando abrirmos o formulário, quando adicionarmos, excluirmos produtos.

Com isso, ele será rodado a cada “passo” feito no formulário principal e no formulário auxiliar de Controle de Produtos, e garantirá que ele atualizará a lista de produtos no nosso estoque.

Observe abaixo os códigos nos formulários diferentes que necessitam ser inclusos para que ele funcione da maneira correta:

FORMULÁRIO DE CONTROLE DE ESTOQUE:

Private Sub CommandButton5_Click()
Call atualiza_caixa_listagem_estoque
End Sub
Private Sub UserForm_Initialize()
caixa_tipo.AddItem "Compra"
caixa_tipo.AddItem "Venda"

Call atualiza_caixa_produtos
Call atualiza_caixa_listagem_transacoes
Call atualiza_caixa_listagem_estoque
End Sub

FORMULÁRIO CONTROLE DE PRODUTOS:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Call FormularioControleEstoque.atualiza_caixa_listagem_estoque
Call FormularioControleEstoque.atualiza_caixa_produtos
End Sub

Explicação das macros do Controle de Estoque:

A linha anterior a cada “End Sub” representa o comando de chamar a macro que criamos nessa aula, a macro de atualizar a nossa caixa de listagem de transações (atualiza_caixa_listagem_estoques).

Então, ao abrir o formulário (UserForm_Initialize), ao clicar no botão de procurar (CommandButton5_Click), o nosso código irá rodar e atualizar os produtos necessários e filtrados conforme a gente queira e escreva na caixa de “procurar”.

Explicação da macro do Controle de Produtos:

Chamaremos a macro criada para atualizar a caixa de listagem de estoque e a caixa de produtos ao fechar o formulário de controle de produtos.

Ou seja, ao fechá-lo, adicionando, excluindo produtos ou não fazendo nada, devemos atualizar todos os lugares que têm produtos a serem possivelmente adicionados ou excluídos, para garantir a lista atualizada.

Conclusão da Caixa de Listagem

Nessa aula você aprendeu o passo a passo para criar a caixa de listagem VBA para exibir os produtos disponíveis no estoque da empresa de exemplo.

Esse passo a passo foi bem similar ao que seguimos para criar a caixa de transações que exibia as transações de compra e venda, feita em um post de algumas aulas atrás.

Até o próximo post! Fique ligado no nosso canal do Youtube para mais conteúdo de Excel e VBA!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um Minicurso Gratuito?


Entre os dias 1 e 4 de março vai rolar o Intensivão de Power BI!

Se você quiser participar, é só preencher seu e-mail abaixo. O evento é 100% Online e Gratuito!