Nessa série de publicações vou te mostrar como criar do zero um Controle de Estoque no VBA utilizando formulários e ferramentas do VBA!
Aulas disponíveis
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:
O que é a Série Controle de Estoque?
Nessa série vamos te ensinar a fazer um formulário de controle de estoque, onde faremos um controle completo no VBA e no Excel, assim conseguimos controlar as transações de entrada e saída de produtos, estoque e controle de compra e venda.
O nosso formulário irá combinar o Excel e o VBA, que juntos irão nos proporcionar fazer uma ferramenta para controlar o nosso estoque, além de registrar compras e vendas.
Ao final da série, teremos uma planilha de estoque completa, que, ao usar o formulário, proporciona que uma pessoa que não saiba mexer no Excel consiga fazer o controle de estoque sem problemas. Apenas tem que entender suas funções.
Observe como ficará o nosso formulário ao final da série:
Ele terá as seguintes funções:
1) Cadastrar produtos novos ou remover antigos
Nesse local do nosso formulário você irá literalmente cadastrar novos produtos (que não fazem parte do seu estoque ou do catálogo de produtos da empresa), ou poderá remover os produtos antigos (produtos que pararam de ser vendidos pela empresa), registrando sempre o custo e o preço de venda.
2) Adicionar ou remover transações de estoque (compra ou venda)
Nesse local do formulário você poderá cadastrar toda e qualquer transação da sua empresa com esses produtos. Ou seja, a cada venda de produto para clientes ou compra de produtos para o estoque da sua empresa, tudo será registrado e ficará visível.
Registrando compra e venda, os valores do estoque se alterarão, dependendo da operação realizada.
3) Pesquisa por produtos já cadastrados (estoque disponível)
No lado esquerdo do nosso formulário podemos encontrar o resumo de como anda o nosso estoque. É a foto do que tem disponível naquele momento em nosso estoque após todos os registros serem contabilizados.
4) Salvar planilha
Temos também um botão para salvar a planilha, depois de realizar todos os cadastros de compra, venda, produtos, fazer exclusões, atualizações.
A ideia dessa primeira aula é mostrar as funcionalidades do nosso controle de estoque para que você possa ver em primeira mão tudo que ele é capaz de fazer.
O que vamos aprender ao longo da série vai ser a parte gráfica, de códigos e operações que nos proporcionam criar, fazer com que ele interaja com o Excel e funcione da melhor maneira possível.
Vamos começar a construir o nosso primeiro formulário de Estoque no VBA para iniciar a construção do nosso Controle de Estoque completo!
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:
Construção do Formulário de Estoque no VBA – Parte 2
Nessa aula vamos começar a construção do cabeçalho do nosso formulário. Nele, vamos utilizar a ferramenta de rótulo no formulário, que serve para representarmos textos, títulos e afins nos formulários.
Para criar o UserForm, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11, e iremos criar um novo formulário indo no menu superior em Inserir > UserForm.
Nesse momento se abrirá a tela dentro do ambiente do VBA o nosso UserForm, na forma de uma minicaixa vazia que tem escrito UserForm1 (por padrão). Essa visualização é, de fato, o nosso formulário na forma embrionária. Observe abaixo:
OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up (janela flutuante) para nos auxiliar. Ela que nos permitirá criar os objetos que iremos inserir no formulário. Caso você clique no formulário e a caixa de ferramentas não esteja “aberta”, basta ir em Exibir > Caixa de ferramentas.
Customização do Formulário de Estoque no VBA
Para customizar o nosso formulário, iremos utilizar a caixa de ferramentas várias vezes, além do menu de Propriedades do UserForm, localizado no canto inferior esquerdo do ambiente do VBA.
0) O primeiro passo é sempre mudar o nome do nosso UserForm. Por padrão ele virá com “UserForm1”. É importante mudar o nome para um nome intuitivo, porque, ao criar os códigos em VBA que vão utilizar o formulário, precisaremos escrever seu nome dentro do código.
Para fazer isso, iremos no menu de propriedades procurar por (Name), dar duplo clique na segunda coluna e colocar o nome como “FormularioControleEstoque”. Repare que o nome não pode ter caractere espaço (pode ser uma alternativa utilizar o “_”).
1) Primeiramente iremos mudar o título/cabeçalho do nosso formulário, que por padrão vem como “UserForm1”. Iremos clicar no formulário, procurar no menu de propriedades pela propriedade Caption.
Em seguida, dar duplo clique no que estiver na coluna da direita (das duas possíveis do menu de propriedades), apagar o que estiver escrito (normalmente UserForm1) e escrever o que queremos. No caso, usaremos como Caption “Controle de Estoque”.
Obs. Repare que aqui podemos escrever qualquer coisa, inclusive o caractere espaço.
2) Vamos inserir uma imagem para servir de fundo do nosso título. Na caixa de ferramentas, iremos optar pelo último objeto (miniatura de uma imagem). Redimensionaremos ela para caber na parte de cima do nosso formulário, do tamanho que queremos.
Com a imagem clicada, iremos mudar a propriedade BackColor (cor de fundo) e mudaremos para uma cor em Paleta (que no caso foi um tipo de azul).
3) Vamos inserir um rótulo no formulário para servir de título do nosso formulário. Na caixa de ferramentas, iremos optar pelo segundo objeto (representado pela letra A). Redimensionaremos ela para caber na parte de cima do nosso formulário, ao centro, do tamanho que queremos.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Controle de Estoque”, colocaremos o BackStyle em 0, e aumentaremos a letra em Font > … > Negrito 22. Para completar, colocaremos o texto centralizado em TextAlign: 2 e colocaremos a fonte na cor branca em ForeColor e escolheremos uma cor branca.
4) Vamos inserir um botão de comando no formulário. Na caixa de ferramentas, iremos optar pelo segundo objeto da segunda linha. Redimensionaremos do tamanho que queremos, como mostrado no vídeo.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Controle de Produtos”, colocaremos o BackColor no 4º azul (conforme no vídeo) e aumentaremos a letra em Font > … > 14 e colocaremos a fonte na cor branca em ForeColor e escolheremos uma cor branca.
5) Iremos copiar (Ctrl+C) esse botão pronto da etapa 4 e colaremos dentro do formulário (Ctrl+V), e trocaremos apenas o Caption para “Salvar”.
Após os 5 passos, observe como está o nosso formulário após essas primeiras 5 etapas:
Nessa aula criamos o nosso formulário e os botões que vamos utilizar para salvar a planilha e para abrir o controle de produtos. Até a próxima aula!
Vamos finalizar a construção da parte gráfica do nosso Formulário de Controle de Estoque na publicação de hoje, etapa final da série!
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:
Finalizando a interface do formulário de Controle de Estoque – Aula 3
Nessa aula vamos continuar a construção do nosso formulário de controle de estoque, e concluir a parte de interface necessária.
Para fazer alterações no nosso formulário já criado, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos continuar o nosso formulário de estoque. Observe abaixo como ele está, no começo do nosso post:
A partir daqui, vamos incluir diversos objetos pra complementar a interface do nosso formulário. Acompanhe as etapas a seguir:
1) Vamos inserir um quadro para servir de enquadramento da parte de transações do nosso formulário. Na caixa de ferramentas, iremos optar pelo primeiro objeto da segunda linha (símbolo de quadro). Redimensionaremos o nosso quadro para caber na parte da direita do nosso formulário, do tamanho que queremos.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Registro de Transações”, aumentaremos a letra em Font > … > 12.
2) Vamos inserir um rótulo no formulário para servir de título do campo. Na caixa de ferramentas, iremos optar pelo segundo objeto (representado pela letra A). Redimensionaremos esse objeto do tamanho que queremos e o colocaremos em um local específico.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Produto:”, colocaremos o BackStyle em 0, e aumentaremos a letra em Font > … > 10.
3) Vamos inserir uma caixa de combinação no nosso formulário. Na caixa de ferramentas, iremos optar pelo quarto objeto da primeira linha. Redimensionaremos do tamanho que queremos, como mostrado no vídeo e colocaremos logo ao lado do rótulo de produto.
4) Iremos copiar (Ctrl+C) nos objetos prontos das etapas 2 e 3, e colaremos dentro do formulário (Ctrl+V), e trocaremos apenas o Caption do rótulo para “Tipo:”. Colocaremos ambos à direita do nosso quadro.
5) Copiaremos o rótulo de produto e colaremos para ele ser o rótulo (já formatado do tamanho de letra e com fundo transparente) de quantidade.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Quantidade:”.
6) Vamos inserir uma caixa de texto no nosso formulário. Na caixa de ferramentas, iremos optar pelo terceiro objeto da primeira linha.
Redimensionaremos do tamanho que queremos, como mostrado no vídeo, e colocaremos logo ao lado do rótulo de quantidade para o usuário preencher as quantidades vendidas ou compradas.
7) Vamos inserir um botão de comando no nosso formulário. Na caixa de ferramentas, iremos optar pelo segundo objeto da segunda linha.
Redimensionaremos do tamanho que queremos, como mostrado no vídeo, e colocaremos logo abaixo do rótulo de tipo.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Adicionar”, e aumentaremos a letra em Font > … > 10.
Vamos copiar esse botão de comando, e colar para ter o mesmo formato de botão, e só trocaremos seu Caption para “Excluir”
8) Copiaremos o rótulo de produto (etapa 5) e a caixa de texto ao lado dela (etapa 6) e colaremos para ele ser o rótulo (já formatado do tamanho de letra e com fundo transparente) de valor. Colaremos logo abaixo do rótulo de produto.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Valor:”.
Repetiremos o passo 8 mais duas vezes, e trocaremos o Caption agora para “Data:” (para o primeiro rótulo) e para “ID:” (para o segundo rótulo).
9) Iremos inserir um quadro e três botões de opções dentro desse quadro, para guardar nossas opções de transação.
Na caixa de ferramentas, iremos optar pelo primeiro objeto da segunda linha. Redimensionaremos o nosso quadro para caber na parte que queremos.
Em seguida, na caixa de ferramentas, iremos optar pelo penúltimo objeto da primeira linha. Criaremos e redimensionaremos como quisermos. Aumentaremos a fonte em Font > … > 10 e mudaremos o Caption para “Compras”. Além disso, colocaremos o BackStyle em 0 (fundo transparente).
Copiaremos esse botão mais duas vezes, e colaremos, mudando apenas o Caption agora para “Vendas (para o primeiro botão copiado) e para “Todas” (para o segundo botão copiado).
10) Vamos inserir uma caixa de listagem para servir de tabela para as nossas transações do nosso formulário. Na caixa de ferramentas, iremos optar pelo quinto objeto da primeira linha. Redimensionaremos do tamanho que queremos.
Até aqui finalizamos a parte direita do nosso formulário, a de registro de transações. Para finalizar a interface do nosso formulário, iremos agora criar a parte de estoque disponível, mais a esquerda do nosso formulário.
11) Vamos inserir um quadro para servir de enquadramento da parte de transações do nosso formulário. Na caixa de ferramentas, iremos optar pelo primeiro objeto da segunda linha (símbolo de quadro). Redimensionaremos o nosso quadro para caber na parte da direita do nosso formulário, do tamanho que queremos.
Com o objeto clicado, iremos mudar a propriedade Caption dele para em “Estoque Disponível” aumentaremos a letra em Font > … > 12.
Copiaremos todas as estruturas prontas de caixa de listagem (etapa 10), botão de comando (etapa 7), rótulo (etapa 2) e caixa de texto (etapa 6). Alteraremos o Caption do rótulo para “Produto:” e o do botão de comando para “Procurar”.
Observe como ficou nosso formulário até agora:
Até aqui finalizamos a parte direita e esquerda do nosso formulário, ou seja, de registro de transações e de estoque disponível, respectivamente. Na próxima aula (e próximo post) iremos fechar a interface do nosso formulário ao criar a interface para o controle de produtos.
Nessa aula da nossa série de estoque vamos aprender a criar a interface gráfica do nosso formulário de controle de produtos.
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:
Criando o formulário para controle de produtos
Nesta quarta aula de como criar um controle de estoque no VBA vamos utilizar novamente a caixa de texto, botão de comando e caixa de listagem para formar o nosso controle de produtos.
Para criar um formulário de controle de estoques auxiliar do nosso formulário principal, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Após isso, iremos procurar pelo nosso formulário principal pronto porque já temos várias estruturas prontas, modificadas e de tamanhos já ideais/proporcionais. Vamos fazer um miniformulário a partir do maior já pronto. Para isso, precisaremos fazer os passos a seguir:
1) Exportar e Importar
Com o VBA já aberto, clicaremos no formulário FormularioControleEstoque, e o renomearemos para FormularioControleEstoque2 (na propriedade Name dele), para fazermos sua exportação.
Em seguido iremos com botão direito do mouse nele, já renomeado, e em exportar arquivo. selecione uma pasta para esse arquivo temporário, e clicar em Salvar. Em seguida podemos desfazer a renomeação que fizemos acima, voltando para o nome FormularioControleEstoque no formulário original.
Agora, iremos de fato importar o formulário “copiado” (exportado) clicando com botão direito em algum formulário existente e clicando em “importar arquivo…”, e selecionando o arquivo que criamos acima, também, e pronto.
Teremos uma cópia do formulário maior como queríamos, com todas as formas e objetos já prontos. Agora começaremos as alterações:
2) Modificações na aparência e propriedades
Primeiramente redimensionaremos o nosso formulário de controle de produtos para que fique menor do que o de controle de estoques, porque ele será um formulário auxiliar (que será aberto e fechado para o outro continuar a ser usado).
Conforme no vídeo, redimensionaremos as formas que queremos deixar dentro do nosso formulário, mudaremos o caption de rótulos conforme for preciso e reposicionaremos os botões. O que não queremos manter excluiremos a partir da seleção do objeto e pelo botão Delete do teclado. Após, clicando no formulário, iremos fazer as seguintes modificações:
– Name: FormularioControleProdutos
– Caption: Controle de Produtos
– Clicaremos na label de “título” e mudaremos sua Caption para “Formulário de Pesquisa”, também, além de a redimensionarmos
– Teremos 4 labels (rótulos): Produto, Custo, ID e Preço de Venda
– Teremos 4 caixas de texto ao lado de cada rótulo
– Teremos 2 botões de Adicionar e Excluir e uma caixa de listagem
3) Criar botão para associar à abertura do Formulário
Como queremos que esse formulário de controle de produtos seja aberto ao clicar num botão no formulário principal (botão de controle de produtos), iremos associar a abertura do formulário de controle de produtos a esse botão.
Para isso, devemos, com o formulário de estoques aberto, dar um duplo clique no botão controle de produtos. Automaticamente se abrirá uma caixa em branco, com coisas escritas. Deveremos ter o seguinte código:
Private Sub CommandButton1_Click()
FormularioControleProdutos.Show
End Sub
Explicação:
Será um código privado (que funciona apenas dentro do nosso formulário) que será disparado ao clicar no botão de controle de produtos, presente no nosso formulário principal (de controle de estoque). Simplesmente será responsável por abrir o nosso formulário de controle de estoque, quando clicarmos no botão de controle de produtos.
Observe como ficou nosso formulário de produtos pronto nessa aula:
Então, fechamos as interfaces do nosso formulário de estoques e de produtos. A partir da próxima aula começaremos a ver os códigos por trás do formulário e como eles interagem com as nossas interfaces gráficas.
Já precisou realizar algo assim que o formulário fosse aberto? O evento UserForm Initialize te ajudaria muito nesse tipo de situação!
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:
Um evento é uma ação, geralmente realizada pelo usuário, ou por algum acontecimento dentro do com o Excel (ou relacionado com ele), vai ativar ou disparar códigos específicos que podemos elaborar com o VBA.
Ele é responsável por gerar uma consequência no nosso Excel. A causa é o evento, e a consequência é o que pretendemos fazer no Excel a partir do acontecimento daquele evento, que são traduzidos nos nossos códigos.
Nessa Série de aulas de VBA vamos te mostrar como criar, do zero, um Controle de Estoque Completo no VBA! Vamos ver todos os passos necessários para a criação da parte gráfica do nosso formulário de controle de estoque, assim como para a criação da inteligência por trás da gestão de estoque Excel.
Nessa quinta aula vamos continuar a construção do nosso formulário de controle de estoque, e começar a introduzir os códigos que o complementarão, iniciando com os que envolvem sua abertura.
Para fazer alterações no nosso formulário já criado, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos continuar o nosso formulário de estoque. Ele está conforme a nossa última aula da série.
Hoje vamos fazer diversas etapas relacionadas aos eventos que vão atuar na inicialização do formulário. Acompanhe:
Precisamos dedicar uma parte do código do nosso formulário para esses eventos específicos funcionarem.
Antes de mais nada, como queremos fazer operações (envolvendo códigos) com objetos específicos, devemos mudar o nome desses objetos, para que fiquem intuitivos.
Precisamos mudar o Caption da caixa de combinação de Tipo para “caixa_tipo” e mudar o Caption da caixa de combinação de Produto para “caixa_produto”, porque vamos usá-las através de nossos códigos.
Mais uma vez lembrando que, para abrir o código do nosso formulário, e acessamos esse código ao abrir o VBA (Alt(+Fn)+F11), e depois indo com botão direito no formulário Controle de Estoque > exibir código.
Escreveremos o seguinte código ao abrir o ambiente de código do nosso Formulário de Estoque:
Private Sub UserForm_Initialize()
caixa_tipo.AddItem "Compra"
caixa_tipo.AddItem "Venda"
Call atualiza_caixa_produtos
End Sub
Explicação do código:
O código acima vai ser ativado/disparado a partir da inicialização do nosso formulário de estoques (UserForm Initialize)
Vamos adicionar um item (AddItem) chamado “Compra” à “caixa_tipo”.
Além disso, vamos adicionar um item (AddItem) chamado “Venda” à “caixa_tipo”.
Até aqui, adicionamos na nossa caixa de tipo as opções, que deveremos optar, ao registrar uma transação, seja de compra ou venda. Esses itens vão nos permitir escolher isso.
Depois, nós vamos chamar (Call) a macro “atualiza_caixa_produtos”, para que ela seja ativada e funcione.
Além do nosso outro código, teremos também o seguinte código para auxiliar o criado na etapa 1, ao abrir o ambiente de código do nosso Formulário de Estoque:
Sub atualiza_caixa_produtos()
linha = Sheets("Controle_de_Produtos").Range("A1048576").End(xlUp).Row
caixa_produto.RowSource = "Controle_de_Produtos!B2:B" & linha
End Sub
Explicação do código:
O código acima vai ser ativado/disparado a partir da inicialização (Initialize) do nosso formulário de estoques (UserForm), como uma macro auxiliar da apresentada na etapa 1.
Ela vai simplesmente na nossa Aba de Controle_de_Produtos criada para armazenar os detalhes dos nossos produtos em uma tabela, vai achar a última linha da coluna A, e armazenar na variável “linha”.
Em seguida, a fonte de dados da nossa caixa_produto vai ser atualizada com os produtos dessa tabela (sempre com a última atualização), dos produtos que vão da linha B2 até a última linha da coluna B, dada pela variável linha.
Combinando as duas etapas, o que teremos é: ao iniciar o formulário, garantiremos o preenchimento da “caixa_tipo” com as opções de Compra e Venda, e, ao mesmo tempo, o carregamento das informações de todos os produtos cadastrados no nosso estoque, atualizadas, para a “caixa_produto”.
Você já precisou exibir informações de uma tabela em um formulário? Utilizar uma caixa de listagem no VBA pode te ajudar com isso!
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:
Nessa série de aulas de VBA vamos te mostrar como criar, do zero, um Controle de Estoque Completo no VBA! Vamos ver todos os passos necessários para a criação da parte gráfica do nosso formulário de controle de estoque, assim como para a criação da inteligência por trás da gestão de estoque Excel.
Nessa sexta aula vamos continuar a construção do nosso formulário de controle de estoque, e vamos continuar a introduzir os códigos que o complementarão, continuando com os que envolvem os eventos a partir de sua abertura. Lembrando que começamos a usar os eventos no formulário de estoques na última aula da série (LINK).
Para fazer alterações no nosso formulário já criado, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos continuar o nosso formulário de estoque.
Hoje vamos fazer diversas etapas relacionadas aos eventos que vão atuar na inicialização do Formulário de Controle de Estoque, mas fazendo modificações no Formulário de Produtos. Acompanhe:
Queremos mostrar todos os produtos na caixa de listagem que aparece ao apertar no botão de “Controle de Produtos”.
Vamos primeiramente mudar o (Name) da nossa ListBox2 para caixa_listagem_produtos, para ter um nome intuitivo, porque a usaremos no nosso código e precisamos reconhecê-la.
Mais uma vez lembrando que, para abrir o código do nosso formulário de interesse, devemos ir com o botão direito no formulário Controle de Produtos > exibir código.
Escreveremos o seguinte código ao abrir o ambiente de código do nosso Formulário de Produtos:
Sub mostrar_produtos()
linha = Sheets("Controle_de_Produtos").Range("A1000000").End(xlUp).Row
FormularioControleProdutos.caixa_listagem_produtos.ColumnCount = 4
FormularioControleProdutos.caixa_listagem_produtos.ColumnHeads = True
FormularioControleProdutos.caixa_listagem_produtos.ColumnWidths = "25;110;67;67"
FormularioControleProdutos.caixa_listagem_produtos.RowSource = "Controle_de_Produtos!A2:D" & linha
End Sub
Private Sub UserForm_Initialize()
Call mostrar_produtos
End Sub
Explicação do código:
Vamos descobrir a última linha preenchida da coluna A, da aba “Controle de Produtos”, e iremos armazenar essa informação na variável “linha”
Vamos adicionar à caixa de listagem de produtos tem 4 colunas. Repare que essa caixa de listagem está no FormularioControleProdutos, por isso o comando começa com o nome do formulário.
A próxima instrução irá dizer que a nossa caixa de listagem tem cabeçalho (cabeçalho = True).
A seguinte irá dizer qual é a largura de cada coluna, das 4 existentes, separadas por ponto e vírgula (;). Lembrando que isso é ajuste fino.
A última linha do nosso código diz respeito ao carregamento de informações que a nossa caixa de listagem vai ter. A fonte de dados da nossa caixa de listagem de produtos será preenchida com as informações da segunda linha da coluna A, até a última linha da coluna D, dada pela variável linha descoberta no começo do nosso código.
E encerra-se a nossa (primeira) sub.
O que queremos aqui é chamar aquela função por uma ação. Iremos colocar essa função para disparar quando o nosso formulário de controle de produtos for inicializado (UserForm Initialize).
As últimas 3 linhas do nosso código farão isso.
Teremos uma sub privada, ou seja, que só vai funcionar dentro do código do nosso formulário, que irá chamar a função mostrar_produtos, que criamos agora para mostrar os produtos atualizados na caixa de listagem, quando o nosso formulário de controle de produtos for aberto.
Na sexta aula dessa série vimos como utilizar uma Caixa de Listagem no VBA (ListBox no VBA). Essa caixa vai ser útil para exibirmos todos os produtos que temos cadastrados em nossa planilha. Até a próxima aula!
Você sabe como executar códigos em VBA de forma automática? Os Eventos no VBA podem te ajudar, e muito, com isso! Chega mais para conferir!
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:
Quais eventos no VBA podemos usar no controle de produtos?
Nessa sétima aula vamos continuar a construção do nosso formulário de controle de estoque, continuando com os que envolvem os eventos de abertura do controle de produtos. Lembrando que começamos a usar os eventos no formulário de estoques na última aula da série (LINK).
Vamos aprender:
Para fazer alterações no nosso formulário já criado, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos continuar o nosso formulário de estoque.
Mais uma vez lembrando que, para abrir o código do nosso formulário de interesse, devemos ir com o botão direito no formulário -> Controle de Produtos -> exibir código.
Hoje vamos fazer diversas etapas relacionadas aos eventos que vão atuar na inicialização do Formulário de Controle de Estoque, mas fazendo modificações no Formulário de Produtos. Acompanhe os eventos:
1) Ao alterar o nome de um produto -> zerar a caixa de ID
Precisamos disparar um evento ao mudar o conteúdo de uma caixa específica.
Para isso, precisamos mudar o nome da caixa que queremos “mexer”. Daremos, então, nome para cada caixa dentro do nosso formulário auxiliar de Controle de Produtos.
Clicaremos nas caixas respectivas, como mostradas no vídeo, e mudaremos os Names para caixa_id, caixa_produto. Daremos um duplo clique na nossa caixa_produto, para se abrir um código associado a ela. O código será o seguinte:
Private Sub caixa_produto_Change()
caixa_id.value= ""
End Sub
Explicação do código:
A cada mudança, ou seja, alteração de caractere no que estiver escrito dentro da caixa_produto resultará na “limpeza” de valor de tudo que estiver escrito na caixa_id, ou seja, ela ficará com seu conteúdo vazio assim que mudarmos o texto presente na caixa_produto.
Isso vai ser útil futuramente ao evitar que se exclua um produto com nome errado, por carregar antes o nome e ID de um produto correto (que veremos nas próximas aulas).
Vamos primeiramente mudar o (Name) da caixa que leva o custo do produto para caixa_custo, para ter um nome intuitivo, porque a usaremos no nosso código e precisamos reconhecê-la, assim como faremos para caixa_preco. (já temos caixa_id e caixa_produto prontas).
O código para realizar essa ação seria:
Private Sub caixa_listagem_produtos_DbClick(ByVal Cancel as MSForms.ReturnBoolean)
caixa_id.Value = caixa_listagem_produtos.list(caixa_listagem_produtos.ListIndex, 0)
caixa_produto.Value = caixa_listagem_produtos.list(caixa_listagem_produtos.ListIndex, 1)
caixa_custo.Value = caixa_listagem_produtos.list(caixa_listagem_produtos.ListIndex, 2)
caixa_preco.Value = caixa_listagem_produtos.list(caixa_listagem_produtos.ListIndex, 3)
End Sub
Explicação do código:
Vamos, ao dar um duplo clique em algum item da caixa de listagem de produtos, carregar:
– na caixa_id o que estiver escrito na linha selecionada, na primeira coluna (índice 0 é relativo à primeira coluna);
– na caixa_produto o que estiver escrito na linha selecionada, na segunda coluna (índice 1);
– na caixa_custo o que estiver escrito na linha selecionada, na terceira coluna (índice 2);
– na caixa_preco o que estiver escrito na linha selecionada, na quarta coluna (índice 3).
E termina a nossa sub.
OBS1: Lembrando que o comando “caixa_listagem_produtos.ListIndex” é o responsável por nos dar a linha que está selecionada na caixa de listagem de produtos. Seja qualquer linha selecionada, ele vai nos retornar seu número.
OBS2: os números relativos às colunas da nossa caixa de listagem de produtos são defasados de uma unidade porque a contagem começa do 0, ou seja, o número 0 corresponde à 1ª coluna, e assim sucessivamente. Se atente para esse fato.
Vou te mostrar como utilizar o Find VBA para encontrar um determinado ID em uma coluna e, a partir disso, excluir a linha desse ID.
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 oitava aula da nossa série de Controle de Estoque Completo no VBA, onde estamos aprendendo a lidar com os eventos no formulário principal, de estoque, e no auxiliar, de controle de produtos.
Nessa aula vamos aprender como remover produto VBA no formulário auxiliar de Controle de Produtos.
Essa aula vai complementar o que foi falado na sétima aula, e o código envolvido para fazer essa remoção do produto no formulário de Controle de Produtos não é difícil. Vamos precisar transferir para o VBA tudo o que faríamos manualmente, como podemos ver a seguir.
Private Sub CommandButton4_Click()
If caixa_id.Value = "" Then
MsgBox ("Favor clicar duas vezes no produto a ser excluído")
Exit Sub
End If
linha = Sheets("Controle_de_Produtos").Range("A:A").Find(caixa_id.Value).Row
Sheets("Controle_de_Produtos").Range(linha & ":" & linha).Delete
caixa_produto.Value = ""
caixa_custo.Value = ""
caixa_preco.Value = ""
caixa_id.Value = ""
MsgBox ("Produto removido com sucesso")
End Sub
Explicação do código:
Seguindo a linha de explicação do vídeo, a primeira coisa que temos que fazer é encontrar a linha do produto a ser excluído e armazenar essa linha na variável “linha”, sendo essa linha a que será encontrada pelo comando “find” (achar, em inglês) o que está escrito na “caixa_id”. Para fazer isso pelo VBA vamos utilizar o Find VBA.
IMPORTANTE: E se não tiver nada escrito na “caixa_id”?
Pra isso que temos um comando “If” no começo do nosso código. A explicação dessa parte é a seguinte: se na “caixa_id” nada tiver escrito (o valor for igual a vazio), o código fará aparecer uma n dizendo “Favor clicar duas vezes no produto a ser excluído”, e o código se encerrará pelo comando “Exit Sub”. Isso é feito para que tenhamos obrigatoriamente algo escrito na “caixa_id”, para que toda a parte debaixo do código seja processada.
Depois de encontrar, vamos precisar excluir essa linha e, para isso, vamos utilizar o comando Delete VBA. Por fim, vamos zerar as informações preenchidas nas caixas de texto do nosso formulário de controle de produtos. Precisamos então, atribuir as caixas produto, custo, preço e id o valor de vazio.
Após realizar esses comandos, é apresentada na tela uma mensagem dizendo “Produto removido com sucesso”, e se encerra a nossa macro.
Cadastrar informações com VBA é um procedimento muito simples e vamos ver todos os detalhes sobre ele na publicação de hoje!
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 nona aula da nossa série de Controle de Estoque Completo no VBA, onde estamos aprendendo a lidar com os eventos no formulário principal, de estoque, e no auxiliar, de controle de produtos.
Nessa aula vamos: aprender como adicionar produto VBA no formulário auxiliar de Controle de Produtos.
Para como adicionar produtos ao formulário, vamos:
Essa aula vai complementar o que foi falado na oitava aula da série, e o código envolvido para fazer essa adição do produto no formulário de Controle de Produtos é o que está descrito abaixo:
Private Sub CommandButton3_Click()
If caixa_produto.Value = "" Then
MsgBox ("Preencha o nome do produto")
Exit Sub
End If
If caixa_custo.Value = "" Then
MsgBox ("Preencha o custo do produto")
Exit Sub
End If
If caixa_preco.Value = "" Then
MsgBox ("Preencha o preço do produto")
Exit Sub
End If
linha = Sheets("Controle_de_Produtos").Range("A1000000").End(xlUp).Row + 1
Sheets("Controle_de_Produtos").Cells(linha, 1).Value = WorksheetFunction.Max(Sheets("Controle_de_Produtos").Range("A:A")) + 1
Sheets("Controle_de_Produtos").Cells(linha, 2).Value = caixa_produto.Value
Sheets("Controle_de_Produtos").Cells(linha, 3).Value = caixa_custo.Value + 0
Sheets("Controle_de_Produtos").Cells(linha, 4).Value = caixa_preco.Value + 0
caixa_produto.Value = ""
caixa_custo.Value = ""
caixa_preco.Value = ""
MsgBox ("Produto adicionado com sucesso")
Call mostrar_produtos
End Sub
Explicação do código:
Você sabe como usar uma Caixa de Listagem VBA? Ela é, na minha opinião, a melhor forma de apresentar dados e informações em formulários!
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 aula da nossa série de Controle de Estoque Completo no VBA, onde estaremos aprendendo a lidar com os eventos no formulário principal, de estoque.
Nessa aula vamos:
Para como adicionar produtos ao formulário, vamos:
O código desenvolvido para fazer essa atualização das transações de compra e venda envolvidos na nossa gestão de estoque Excel é o apresentado abaixo:
Sub atualiza_caixa_listagem_transacoes()
Sheets("Compras_e_Vendas").AutoFilterMode = False
If botao_compra.Value = True Then
Sheets("Compras_e_Vendas").UsedRange.AutoFilter 4, "Compra"
ElseIf botao_venda.Value = True Then
Sheets("Compras_e_Vendas").UsedRange.AutoFilter 4, "Venda"
End If
Sheets("Caixa_Compras_e_Vendas").UsedRange.Clear
Sheets("Compras_e_Vendas").UsedRange.Copy
Sheets("Caixa_Compras_e_Vendas").Range("a1").PasteSpecial
Sheets("Compras_e_Vendas").AutoFilterMode = False
linha = Sheets("Caixa_Compras_e_Vendas").Range("A1000000").End(xlUp).Row
FormularioControleEstoque.caixa_listagem_transacoes.ColumnCount = 6
FormularioControleEstoque.caixa_listagem_transacoes.ColumnHeads = True
FormularioControleEstoque.caixa_listagem_transacoes.ColumnWidths = "0;80;70;50;50;80"
FormularioControleEstoque.caixa_listagem_transacoes.RowSource = "Caixa_Compras_e_Vendas!A2:F" & linha
End Sub
Explicação do código:
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, ou quando clicarmos em uma das opções (Compra, Venda ou Todas).
Com isso, ele será rodado a cada “passo” feito no formulário, e garantirá que ele atualizará a lista de produtos transacionados na nossa empresa.
Observe abaixo os códigos que necessitam ser inclusos para que ele funcione da maneira correta:
Private Sub UserForm_Initialize()
caixa_tipo.AddItem "Compra"
caixa_tipo.AddItem "Venda"
Call atualiza_caixa_produtos
Call atualiza_caixa_listagem_transacoes
End Sub
Private Sub botao_compra_Click()
Call atualiza_caixa_listagem_transacoes
End Sub
Private Sub botao_venda_Click()
Call atualiza_caixa_listagem_transacoes
End Sub
Private Sub OptionButton3_Click()
Call atualiza_caixa_listagem_transacoes
End Sub
Explicação:
Vou te mostrar como utilizar o Evento Change VBA para sempre que o produto for alterado, seu valor ser atualizado automaticamente.
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:
Estamos na parte de transações do nosso formulário, e será nele que trabalharemos nessa aula de hoje. Essa é a décima primeira 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.
Nessa aula vamos:
O que queremos fazer é atrelar um código funcional ao fato de mudarmos a caixa de produto e a caixa de tipo (compra ou venda). Então, para fazer modificações necessárias, teremos que:
Private Sub caixa_produto_Change()
If caixa_tipo.Value = "" Then
caixa_valor.Value = ""
Exit Sub
End If
If caixa_tipo.Value = "Compra" Then
caixa_valor.Value = Format(Sheets("Controle_de_Produtos").Range("B:B").Find(caixa_produto.Value).Offset(0, 1).Value, "R$ #,##0.00")
Else
caixa_valor.Value = Format(Sheets("Controle_de_Produtos").Range("B:B").Find(caixa_produto.Value).Offset(0, 2).Value, "R$ #,##0.00")
End If
End Sub
Explicação:
Se a caixa de tipo estiver vazia, a caixa de valor será esvaziada também, para não ficar nenhum valor de resquício, e a macro se encerrará sem fazer mais nada.
Com a caixa_tipo preenchida, precisaremos buscar o produto que esteja selecionado na caixa_produto, e o preço de venda ou de compra associado a ele, através da função Find VBA.
Caso esteja selecionado compra na caixa_tipo, na caixa_valor ficará escrito o valor imediatamente a direita (Offset VBA de 1 célula para a direita) do valor encontrado na aba “Controle_de_Produtos” (célula da coluna ao lado da célula encontrada)
Caso esteja selecionado venda na caixa_tipo, na caixa_valor ficará escrito o valor duas células da coluna ao lado do valor encontrado na aba “Controle_de_Produtos” (célula a duas colunas ao lado da célula encontrada: Offset VBA de 2 células para a direita)
Ambos os valores de compra ou venda serão formatados como moeda, ao serem encontrados corretamente, na primeira ou segunda colunas ao lado do valor procurado (que estará escrito na caixa_tipo).
Caso não recebam a função Format VBA, eles apareceriam como texto (1,25) e não como moeda (R$ 1,25), como queremos.
OBS: Precisamos copiar essa macro inteira e atrelar a um evento change VBA também na caixa_tipo, para que qualquer mudança dela (caixa_tipo) faça com que esses valores na caixa_valor também mudem.
Se não fizermos isso, a caixa_tipo só seria alterada pelas mudanças na caixa_produto. Por exemplo, se fosse selecionado um produto, e por padrão estivesse “Compra” na caixa_tipo, teríamos o valor de compra final. Mas, se mudássemos para “Venda” na caixa_tipo, o valor não se alteraria, como pode ser observado no vídeo.
Portanto, o que precisamos é de uma nova macro de evento change (Private Sub caixa_tipo()) exatamente igual à macro acima, copiaremos esse código e colaremos nela (sem a primeira linha, é claro).
Vamos ver como utilizar as funções do Excel no VBA para cadastrarmos informações na planilha utilizando o WorksheetFunction VBA.
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:
Estamos na parte de transações do nosso formulário, e será nele que trabalharemos nessa aula de hoje. Essa é a décima segunda 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.
Nessa aula vamos:
O que queremos fazer é atrelar um código funcional ao fato de mudarmos a caixa de produto e a caixa de tipo (compra ou venda). Então, para fazer modificações necessárias, teremos que:
Private Sub CommandButton3_Click()
If caixa_produto.Value = "" Then
MsgBox ("Preencha o nome do produto")
Exit Sub
End If
If caixa_quantidade.Value = "" Then
MsgBox ("Preencha a quantidade da transação")
Exit Sub
End If
If caixa_tipo.Value = "" Then
MsgBox ("Preencha o tipo da transação")
Exit Sub
End If
If caixa_valor.Value = "" Then
MsgBox ("Preencha o valor unitário da transação")
Exit Sub
End If
If caixa_data.Value = "" Then
MsgBox ("Preencha a data da transação")
Exit Sub
End If
linha = Sheets("Compras_e_Vendas").Range("A1000000").End(xlUp).Row + 1
Sheets("Compras_e_Vendas").Cells(linha, 1).Value = WorksheetFunction.Max(Sheets("Compras_e_Vendas").Range("A:A")) + 1
Sheets("Compras_e_Vendas").Cells(linha, 2).Value = caixa_produto.Value
Sheets("Compras_e_Vendas").Cells(linha, 3).Value = caixa_quantidade.Value + 0
Sheets("Compras_e_Vendas").Cells(linha, 4).Value = caixa_tipo.Value
Sheets("Compras_e_Vendas").Cells(linha, 5).Value = caixa_valor.Value + 0
Sheets("Compras_e_Vendas").Cells(linha, 6).Value = CDate(caixa_data.Value)
caixa_produto.Value = ""
caixa_quantidade.Value = ""
caixa_tipo.Value = ""
caixa_valor.Value = ""
caixa_data.Value = ""
MsgBox ("Transação adicionada com sucesso")
Call atualiza_caixa_listagem_transacoes
End Sub
Explicação:
Nessa publicação vou te mostrar como você pode utilizar as fórmulas do Excel no VBA alterando a propriedade FormulaLocal das células!
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:
Estamos na parte de estoque disponível do nosso formulário de controle de Estoques, e será nele que trabalharemos nessa aula de hoje. Essa é a décima terceira 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.
Nessa aula vamos:
O que queremos fazer é atualizar a caixa de listagem de estoque à esquerda do nosso formulário de estoques, usando fórmulas do Excel e VBA associados para atingir esse objetivo. Para isso, teremos que:
Sub atualiza_caixa_listagem_estoque()
Sheets("Estoque").Cells.Clear
Sheets("Controle_de_Produtos").Range("B:B").Copy Sheets("Estoque").Range("A1")
Sheets("Estoque").Range("B1").Value = "Compras"
Sheets("Estoque").Range("C1").Value = "Vendas"
Sheets("Estoque").Range("D1").Value = "Estoque"
Sheets("Estoque").Range("B2").FormulaLocal = "=SOMASES(Compras_e_Vendas!C:C;Compras_e_Vendas!B:B;Estoque!A2;Compras_e_Vendas!D:D;""Compra"")"
Sheets("Estoque").Range("C2").FormulaLocal = "=SOMASES(Compras_e_Vendas!C:C;Compras_e_Vendas!B:B;Estoque!A2;Compras_e_Vendas!D:D;""Venda"")"
Sheets("Estoque").Range("D2").FormulaLocal = "=B2-C2"
End Sub
Explicação do código acima:
Além disso, precisaremos atrelar esse código ao evento de abertura do nosso formulário de estoque, para garantir que os estoques vão ser atualizados sempre que abrirmos o formulário. Assim, teremos sempre os números atualizados.
Para isso, devemos “chamar” (call) a macro que acabamos de criar no evento de abertura do formulário. Ela será a última linha do código abaixo:
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
Com isso, conseguimos garantir que a nossa macro de atualização de estoque disponível será acionada sempre que abrirmos o Formulário de Estoques.
Conhece o atalho de arrastar para baixo no Excel? Utilizando o FillDown você consegue arrastar para baixo no VBA também!
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 quarta 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. Estamos na parte de estoque disponível do nosso Formulário de Controle de Estoques, e será nele que trabalharemos nessa aula de hoje.
Nessa aula vamos:
O que queremos fazer é atualizar a caixa de listagem de estoque à esquerda do nosso formulário de estoques, usando fórmulas do Excel e VBA associados para atingir esse objetivo. Para isso, teremos que:
Sub atualiza_caixa_listagem_estoque()
Sheets("Estoque").Cells.Clear
Sheets("Controle_de_Produtos").Range("B:B").Copy Sheets("Estoque").Range("A1")
Sheets("Estoque").Range("B1").Value = "Compras"
Sheets("Estoque").Range("C1").Value = "Vendas"
Sheets("Estoque").Range("D1").Value = "Estoque"
linha = Sheets("Estoque").Range("A1000000").End(xlUp).Row
If linha > 1 Then
Sheets("Estoque").Range("B2").FormulaLocal = "=SOMASES(Compras_e_Vendas!C:C;Compras_e_Vendas!B:B;Estoque!A2;Compras_e_Vendas!D:D;""Compra"")"
Sheets("Estoque").Range("C2").FormulaLocal = "=SOMASES(Compras_e_Vendas!C:C;Compras_e_Vendas!B:B;Estoque!A2;Compras_e_Vendas!D:D;""Venda"")"
Sheets("Estoque").Range("D2").FormulaLocal = "=B2-C2"
If linha > 2 Then
Sheets("Estoque").Range("B2:D" & linha).FillDown
End If
Sheets("Estoque").Calculate
End If
Sheets("Estoque").UsedRange.Copy
Sheets("Estoque").UsedRange.PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Explicação do código:
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:
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:
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():
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.
Nesta aula vamos te ensinar como utilizar o evento DblClick no VBA dentro do listbox para carregar as informações de transações!
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 sexta 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.
Nela vamos falar sobre eventos no VBA. Mais especificamente, vou te ensinar a utilizar o evento DblClick VBA em nosso formulário.
Vamos:
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:
Private Sub caixa_listagem_transacoes_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
caixa_produto.Value = caixa_listagem_transacoes.List(caixa_listagem_transacoes.ListIndex, 1)
caixa_quantidade.Value = caixa_listagem_transacoes.List(caixa_listagem_transacoes.ListIndex, 2)
caixa_tipo.Value = caixa_listagem_transacoes.List(caixa_listagem_transacoes.ListIndex, 3)
caixa_data.Value = CDate(caixa_listagem_transacoes.List(caixa_listagem_transacoes.ListIndex, 5))
caixa_id.Value = caixa_listagem_transacoes.List(caixa_listagem_transacoes.ListIndex, 0)
End Sub
Explicação do código acima:
Vamos, ao dar um duplo clique em algum item da caixa de listagem de transações, carregar:
– na caixa_id o que estiver escrito na linha selecionada, na primeira coluna (índice 0 é relativo à primeira coluna);
– na caixa_produto o que estiver escrito na linha selecionada, na segunda coluna (índice 1);
– na caixa_quantidade o que estiver escrito na linha selecionada, na terceira coluna (índice 2);
– na caixa_tipo o que estiver escrito na linha selecionada, na quarta coluna (índice 3).
– na caixa_data o que estiver escrito na linha selecionada, que deverá ser convertido pela função CDate porque por padrão temos um número, na sexta coluna (índice 5).
E termina a nossa sub.
OBS1: Lembrando que o comando “caixa_listagem_transacoes.ListIndex” é o responsável por nos dar a linha que está selecionada na caixa de listagem de transações. Seja qualquer linha selecionada (pelo duplo clique ou evento DblClick VBA), ele vai nos retornar seu número.
OBS2: Os números relativos as colunas da nossa caixa de listagem de produtos são defasados de uma unidade porque a contagem começa do 0. Ou seja, o número 0 corresponde à 1ª coluna, e assim sucessivamente. Se atente para esse fato.
Nesta aula vamos te ensinar como excluir uma transação no VBA dentro de um formulário, ou seja, vamos te ensinar o código que faz essa operação!
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 sétima 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.
Nela vamos trabalhar com diferentes eventos no VBA. Mais especificamente, vamos utilizá-los para a excluir uma transação do nosso estoque com o comando Delete VBA.
Vamos:
O que queremos fazer é: excluir uma informação presente na caixa de listagem de transações, que fica à direita do nosso formulário de estoque. Usaremos códigos em VBA associados com o Excel para atingir esse objetivo, tendo que:
Private Sub CommandButton4_Click()
If caixa_id.Value = "" Then
MsgBox ("Favor dar um duplo clique na transação a ser excluída")
Exit Sub
End If
linha = Sheets("Compras_e_Vendas").Range("A:A").Find(caixa_id.Value).Row
Sheets("Compras_e_Vendas").Range(linha & ":" & linha).Delete
caixa_produto.Value = ""
caixa_quantidade.Value = ""
caixa_tipo.Value = ""
caixa_valor.Value = ""
caixa_data.Value = Format(Date, "dd/mm/yyyy")
caixa_id.Value = ""
Call atualiza_caixa_listagem_transacoes
Call atualiza_caixa_listagem_estoque
MsgBox ("Transação excluída com sucesso")
End Sub
Explicação do código acima:
Vamos, ao dar um clique no botão de excluir do nosso formulário:
OBS: Ao excluir uma transação, o ID fica de resquício na caixa de ID. Com isso, pode-se confundir e tentar excluir uma transação que não existe, podendo dar erro no código, por exemplo.
Para corrigir isso, precisaremos zerar a caixa de id assim que qualquer mudança for feita nas outras caixas. Para isso, iremos incluir a linha de código “ caixa_id.Value = “” ” ao dar duplo clique em cada caixa do nosso formulário. Então, colocaremos essa linha de códigos na seguintes subs:
Nesta aula vamos estar finalizar o design da planilha VBA, então vamos mostrar os ajustes finais para completar o Controle de Estoque!
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 oitava aula e última da nossa série de Controle de Estoque Completo no VBA, onde estaremos fazendo alguns ajustes finais e de design na nossa planilha, para aprimorar o nosso formulário de controle de estoque.
Nessa aula vamos:
O que queremos fazer é: excluir uma informação presente na caixa de listagem de transações, que fica à direita do nosso formulário de estoque. Usaremos códigos em VBA associados com o Excel para atingir esse objetivo, tendo que:
Private Sub CommandButton2_Click()
ThisWorkbook.Save
MsgBox ("Planilha salva com sucesso!")
End Sub
Explicação do código acima (CommandButton2_Click()):
Ajustar a propriedade TabIndex das caixas e botões:
Nas aulas anteriores, esquecemos de fazer uma modificação, que atualiza as informações do nosso estoque (caixa de listagem do estoque), após adicionarmos ou excluirmos informações nas transações realizadas pela empresa.
Devemos, então, incluir a última linha abaixo, no código do botão de “Adicionar”, na parte de transações:
Private Sub CommandButton3_Click()
.
.
.
Call atualiza_caixa_listagem_transacoes
Call atualiza_caixa_listagem_estoque
End Sub
OBS: Essa última linha também deve estar presente na macro Private Sub CommandButton4_Click() (Botão de “Excluir”).
Agora nós vamos para as mudanças de design.
Queremos que, toda vez que abrirmos a planilha, o formulário já automaticamente esteja aberto, sem precisar “abrir” ou “chamar” o formulário. Para isso, devemos adicionar um evento associado à abertura da planilha. Então, vamos:
Private Sub Workbook_Open()
Application.WindowState = xlMaximized
Sheets("Exibir_Formulario").Activate
Application.DisplayFullScreen = True
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayFormulaBar = False
FormularioControleEstoque.Show
Application.ScreenUpdating = False
End Sub
Explicação do código acima:
Precisamos também ativar as funções ou propriedades desativadas, e desativar as ativadas, nesse caso, ao abrir a planilha. A hora de fazer esse código “inverso” é quando clicarmos para fechar o formulário de estoques.
Então, iremos associar outro código, o inverso do exposto acima, no evento de QueryClose do nosso UserForm.
Para isso iremos:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.DisplayFullScreen = False
ActiveWindow.DisplayGridlines = True
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayWorkbookTabs = True
Application.DisplayFormulaBar = True
Application.ScreenUpdating = True
End Sub
Explicação do código acima:
Então até agora abrimos a planilha, realizamos as operações necessárias de controle de estoque, fechamos o formulário e voltamos ao Excel normal. E como abrimos o formulário novamente?
Para isso, vamos adicionar um botão, para facilitar a nossa “volta” ao formulário. Siga os passos abaixo:
Sub mostra_formulario_estoque()
FormularioControleEstoque.Show
End Sub
Para finalizar, iremos ocultar as abas que possuem as informações que atualizam as caixas de listagem de estoque e de transações, mas não são abas funcionais do nosso arquivo. Portanto, iremos ocultar as abas de “Caixa_Compras_e_Vendas” e “Caixa_Estoque”.
Nesta aula vamos te mostrar como criar um botão de imprimir no VBA para que possa fazer a impressão do seu formulário de estoque para visualizar em papel!
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:
Voltamos com a nossa série de Controle de Estoque Completo no VBA! Essa é a décima nona aula dessa série, onde vamos criar um Botão de Imprimir no VBA que irá possibilitar a impressão do que estiver no nosso estoque disponível, e as transações do tipo que estiver selecionado (compra, venda, ou todas).
Iremos praticamente fechar a série de formulário de controle de estoque com essa dica útil a pedido de vocês!
Nessa aula vamos:
Como Imprimir Relatório de Estoque? – Controle de estoque no VBA
O que queremos fazer é: inserir um botão que, quando clicado, nos permita imprimir os produtos que estão listados no estoque disponível no nosso formulário, e as transações desejadas, com filtro (compra, venda) ou sem filtro (todas).
Usaremos códigos em VBA associados com o Excel para atingir esse objetivo, tendo que:
Private Sub CommandButton6_Click()
Sheets("Impressao").Cells.Clear
Sheets("Impressao").Range("A1").Value = "Estoque Disponível"
Sheets("Impressao").Range("A1:D1").Merge
Sheets("Impressao").Rows(1).Font.Bold = True
Sheets("Caixa_Estoque").Range("A1").CurrentRegion.Copy Sheets("Impressao").Range("A3")
linha_vazia = Sheets("Impressao").Range("A1000000").End(xlUp).Row + 2
Sheets("Impressao").Cells(linha_vazia, 1).Value = "Transações"
Sheets("Impressao").Range("A" & linha_vazia & ":F" & linha_vazia).Merge
Sheets("Impressao").Rows(linha_vazia).Font.Bold = True
Sheets("Caixa_Compras_e_Vendas").Range("A1").CurrentRegion.Copy Sheets("Impressao").Cells(linha_vazia + 2, 1)
Sheets("Impressao").Columns.AutoFit
Sheets("Impressao").Rows.HorizontalAlignment = xlHAlignCenter
Unload Me
'Sheets("Impressao").PrintPreview
Sheets("Impressao").PrintOut
End Sub
Explicação do código acima:
Nesta aula vamos te mostrar como criar um botão para baixar relatório no VBA, assim poderá criar um relatório de estoque em PDF!
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:
Mais uma aula extra da nossa série de Controle de Estoque Completo no VBA! Essa é a vigésima e última aula da série, onde vamos criar um botão que irá nos possibilitar salvar planilha Excel em PDF com VBA, que terá o estoque disponível, e as transações do tipo que estiver selecionado (compra, venda, ou todas).
Iremos fechar a série de formulário de controle de estoque com esse post com uma dica útil a pedido de vocês!
Nessa aula vamos:
Como salvar planilha em PDF?
O que queremos fazer é: inserir um botão que, quando clicado, nos permita baixar um relatório em PDF com VBA.
Nesse relatório teremos os produtos que estão listados no estoque disponível no nosso formulário, e as transações desejadas, com filtro (compra, venda) ou sem filtro (todas).
Usaremos códigos em VBA associados com o Excel para atingir esse objetivo, tendo que:
Private Sub CommandButton7_Click()
Sheets("Impressao").Cells.Clear
Sheets("Impressao").Range("A1").Value = "Estoque Disponível"
Sheets("Impressao").Range("A1:D1").Merge
Sheets("Impressao").Rows(1).Font.Bold = True
Sheets("Caixa_Estoque").Range("A1").CurrentRegion.Copy Sheets("Impressao").Range("A3")
linha_vazia = Sheets("Impressao").Range("A1000000").End(xlUp).Row + 2
Sheets("Impressao").Cells(linha_vazia, 1).Value = "Transações"
Sheets("Impressao").Range("A" & linha_vazia & ":F" & linha_vazia).Merge
Sheets("Impressao").Rows(linha_vazia).Font.Bold = True
Sheets("Caixa_Compras_e_Vendas").Range("A1").CurrentRegion.Copy Sheets("Impressao").Cells(linha_vazia + 2, 1)
Sheets("Impressao").Columns.AutoFit
Sheets("Impressao").Rows.HorizontalAlignment = xlHAlignCenter
Unload Me
caminho = "C:UsersdamorOneDriveHashtag (1)OnlineConteúdosPlanilhas2020VBA11-20 - Série Controle de EstoqueRelatório.pdf"
Sheets("Impressao").ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, OpenAfterPublish:=True
End Sub
Explicação do código acima:
Essa foi uma série de 20 aulas, mas eu consegui te mostrar como você pode criar um Controle de Estoque do zero utilizando o VBA.
Agora você tem uma ferramenta completa para fazer o controle do seu estoque de forma rápida e eficiente, além de poder alterar qualquer parte para atender suas necessidades.
Então você pode acrescentar mais informações, botões, ações, novas funcionalidades e muitos mais. Fora que agora você pode adaptar tudo as necessidades do seu trabalho, então se precisar adicionar, remover ou até mesmo alterar já tem capacidade de fazer isso tranquilamente.
Agora é colocar a mão na massa e criar o seu controle de estoque para sua empresa e se preparar para receber elogios!
Para acessar outras publicações de VBA, clique aqui!
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.