Blog

Postado em em 15 de janeiro de 2021

Caixa de Listagem no VBA

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?


Vire uma referência no Mercado de Trabalho por causa do Power BI!

Quer saber como? Inscreva-se no Intensivão de Power BI! É gratuito!