Blog

Postado em em 30 de novembro de 2020

Controle de Estoque no VBA

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

Controle de Estoque no VBA – Apresentação 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:

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.

Apresentação da série – Controle de estoque no vba

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:

Controle De Estoque Excel
Controle De Estoque Excel

Ele terá as seguintes funções:

1) Cadastrar produtos novos ou remover antigos

Imagem 2

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)

Imagem 3

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)

Gestão De Estoque Excel
Gestão De Estoque Excel

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.

Formulário de Estoque no VBA – Iniciando a Construção

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:

Formulário De Controle De Estoque
Formulário De Controle De Estoque

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:

Controle De Estoque Excel
Controle De Estoque Excel

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!

Formulário de Controle de Estoque no VBA – Etapas Finais

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:

Formulário De Controle De Estoque
Formulário De Controle De Estoque

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:

Controle De Estoque Completo
Controle De Estoque Completo

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.

Controle de Produtos – Como exibir produtos em um formulário

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:

Controle De Produtos No VBA
Controle De Produtos No VBA

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.

UserForm Initialize: Inicialização do Formulário

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:

O que são eventos no VBA? – Controle de estoque no vba

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.

Como usar o UserForm Initialize em nosso formulário?

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:

1) Carregar opções de compra, venda (tipo) e listar produtos no UserForm Initialize

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.

2) Macro auxiliar de atualizar a caixa de produtos

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

Caixa de Listagem no VBA para um Controle de Produtos

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:

Carregar produtos cadastrados na caixa de listagem

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!

Eventos no VBA: Como Rodar Macros Automaticamente

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:

  • Zerar o ID de um produto ao alterar seu nome, para evitar que mexamos no produto errado
  • Preencher a caixa de listagem do nosso “Controle de Produtos” com as informações dos produtos cadastrados na planilha

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

2) Preencher as informações de um produto da caixa de listagem do Controle de Produtos ao dar um duplo clique em qualquer produto dela

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.

Find VBA: Como Encontrar e Excluir Linhas de uma Planilha

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:

Como Usar o Find VBA?

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_idnada 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 através de um Formulário

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.

Como Cadastrar Informações com VBA?

Para como adicionar produtos ao formulário, vamos:

  • entrar no VBA através do atalho Alt(+Fn)+F11
  • procurar pelo Formulário de Produtos e dar duplo clique
  • dar duplo clique no botão de Adicionar (para que o código associado a ele se abra)

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:

  • As três primeiras instruções If vão dizer respeito as caixas de produto, custo e preço estarem vazias. Se uma delas estiver vazia (valor igual a “”), será exibida uma mensagem na tela respectiva sobre o que está faltando, ou seja, nome, custo ou preço do produto, e o código se encerrará sem adicionar o produto.
  • Depois disso, será necessário descobrir em que linha nós vamos registrar esse produto no Excel, para servir de base para a nossa caixa de listagem. Para isso, vamos na célula A1000000 e iremos até a última célula preenchida, e adicionaremos 1, para garantir que temos a linha vazia, abaixo da última preenchida. Essa linha de cadastro ficará armazenada na variável linha.
  • Após isso, vamos direcionar onde colocaremos os valores digitados no nosso formulário.
  • A célula da primeira coluna da linha de cadastro receberá o valor do ID, que será equivalente ao valor máximo da coluna de IDs somado em 1 unidade, para garantir que esse é o “próximo” dos que já existem ali (exemplo: se tem 5, o próximo a se cadastrar é 5+1 = 6).
  • A célula da segunda coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de produto.
  • A célula da terceira coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de custo. Como esse valor é um texto, somaremos zero (0) ao que for digitado para o VBA entender que isso é um número.
  • A célula da quarta coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de preço. Como esse valor é um texto, somaremos zero (0) aqui também.
Controle de Produtos no VBA
Controle de Produtos no VBA
  • Após fazer o registro do novo produto na planilha, serão apagados os textos digitados nas caixas de produto, custo e preço, para que possam ser digitados novos valores
  • Em seguida será exibida uma mensagem na tela dizendo “Produto adicionado com sucesso”, indicando que tudo ocorreu da melhor forma.
  • Para finalizar, será chamada a macro já pronta de ‘mostrar_produtos”, para que a nossa caixa de listagem com os produtos seja atualizada com o novo produto adicionado
  • E se encerra o nosso código

Caixa de Listagem VBA: Apresentando Tabelas Facilmente – Controle de estoque no VBA

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:

  • Configurar a caixa de listagem do controle de produtos do VBA, onde ficarão todas as transações atualizadas do nosso estoque

Como atualizar nossa caixa de listagem do controle de produtos no VBA de forma automática?

Para como adicionar produtos ao formulário, vamos:

  • adicionar uma aba para Compras e Vendas no Excel
  • adicionar os cabeçalhos de ID, Produto, Quantidade, Tipo, Valor, Data, nas colunas A, B, C, D, E e F, respectivamente
  • criar uma aba espelhada (copiada) da aba de Compras e Vendas para servir de auxiliar da nossa caixa de listagem
  • entrar no VBA através do atalho Alt(+Fn)+F11
  • procurar pelo Formulário de Estoques > botão direito > exibir código

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:

  • Primeiro de tudo, vamos garantir que nenhum filtro está ativado, porque precisamos em seguida ativá-lo, para que não haja erro
  • Em seguida vamos verificar uma condição: que botão está selecionado? De compra? De venda?
  • Se for o de compra, devemos filtrar as informações da tabela presente na aba de Compras_e_Vendas apenas para as compras, aplicando o filtro na quarta coluna.
  • Se for o de venda, devemos filtrar as informações da tabela presente na aba de Compras_e_Vendas apenas para as vendas, aplicando o filtro também na quarta coluna
  • Em seguida, iremos limpar tudo que está preenchido na aba de Caixa_Compras_e_Vendas
  • Copiar toda a tabela já filtrada da aba de Compras_e_Vendas, conforme a opção que queremos (seleção de Compra, Venda ou Todas)
  • Colar as informações “prontas” na aba de Caixa_Compras_e_Vendas
  • Desativar os filtros da aba de Compras_e_Vendas
  • Em seguida precisaremos carregar as informações atualizadas para a caixa de listagem, e para isso precisamos descobrir qual a última linha que tem informações na nossa tabela já filtrada e colada na aba de Caixa_ Compras_e_Vendas, que será dada pela nossa variável “linha”
  • Definiremos o que aparecerá na nossa caixa de listagem, que serão 6 colunas; cabeçalho existente (True), as larguras das colunas mostradas na caixa de listagem (0, 80, 70, 50, 50 e 80), e a fonte de dados irá da célula A2 até a última linha da coluna F (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, 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:

  • 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_transacoes).
  • Então, ao abrir o formulário (UserForm_Initialize), ativar botão de opção de compra (botao_compra_Click) ou de venda (botao_venda_Click), ou de todas (OptionButton3_Click) o nosso código irá rodar e atualizar os produtos necessários e filtrados conforme a gente queira: só transações de venda, só de compra, ou todas as transações (que é o padrão ao abrir o formulário).

Evento Change VBA: Atualizando o Valor do Produto Automaticamente – Controle de estoque no VBA

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:

  • Configurar os valores do produto na parte de transações, para que ele mostre valores de preço (venda) e custo (compra) respectivos de cada produto do estoque

Como usar o Evento Change VBA para atualizar os valores dos produtos?

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:

  • Abrir o ambiente do VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque e clicar duas vezes nele
  • Dar duplo clique na caixa_produto para criar um evento caixa_produto_Change
  • Mudar o nome da caixa de valor de TextBox2 para caixa_valor
  • Inserir o código abaixo
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).

WorksheetFunction VBA para Cadastrar Transações na Planilha

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:

  • Cadastrar transações na planilha e atualizar a lista de transações

Usando o WorksheetFunction VBA para Cadastrar as Informações na Planilha?

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:

  • Abrir o ambiente do VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque e clicar duas vezes nele
  • Mudar o nome da caixa de valor de TextBox1 para caixa_quantidade
  • Mudar o nome da caixa de valor de TextBox2 para caixa_data
  • Mudar o nome da caixa de valor de TextBox3 para caixa_id
  • Mudar propriedade Enabled da caixa_id e para a Label ID para False, para desativá-la
  • Dar duplo clique no botão “Adicionar” para criar um evento change VBA
  • Inserir o código abaixo
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:

  • As cinco primeiras instruções If vão dizer respeito as caixas de produto, quantidade, tipo, valor e data estarem vazias: se uma delas estiver vazia (valor igual a “”), será exibida uma mensagem na tela respectiva sobre o que está faltando, ou seja, produto, quantidade, tipo, valor e data da transação, e o código se encerrará sem adicionar a transação no sistema.
  • Depois disso, será necessário descobrir em que linha nós vamos registrar esse produto no Excel, para servir de base para a nossa caixa de listagem. Para isso, vamos na célula A1000000 da aba de Compras_e_Vendas, e iremos até a última célula preenchida, e adicionaremos 1, para garantir que temos a linha vazia, abaixo da última preenchida. Essa linha de cadastro ficará armazenada na variável linha.
  • Após isso, vamos direcionar onde colocaremos os valores digitados no nosso formulário.
  • A célula da primeira coluna da linha de cadastro receberá o valor do ID, que será equivalente ao valor máximo (dado pela Worsheetfunction VBA de Maximização) da coluna de IDs somado em 1 unidade, para garantir que esse é o “próximo” dos que já existem ali (exemplo: se tem 5, o próximo a se cadastrar é 5 + 1 = 6).
  • A célula da segunda coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de produto.
  • A célula da terceira coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de quantidade. Como esse valor é um texto, somaremos zero (0) ao que for digitado para o VBA entender que isso é um número.
  • A célula da quarta coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de tipo.
  • A célula da quinta coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de valor. Como esse valor é um texto, somaremos zero (0) aqui também.
  • A célula da sexta coluna da linha de cadastro receberá o valor que o usuário digitará na caixa de data. Como esse valor é um texto, precisaremos converter esse valor em uma data através da função Cdate VBA para que o VBA transforme o que foi digitado (inicialmente texto) seja interpretado como data.
  • Após fazer o registro do novo produto na planilha, serão apagados os textos digitados nas caixas de produto, quantidade, tipo, valor e data, para que possam ser digitados novos valores
  • Em seguida será exibida uma mensagem na tela dizendo “Transação adicionada com sucesso”, indicando que tudo ocorreu da melhor forma.
  • Para finalizar, será chamada a macro já pronta de “atualiza_caixa_listagem_transacoes”, para que a nossa caixa de listagem com os produtos seja atualizada com o novo produto adicionado
  • E se encerra o nosso código

Fórmulas do Excel no VBA Utilizando a Propriedade FormulaLocal

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:

  • Utilizar fórmulas do Excel atreladas a um código para atualizar os estoques disponíveis na nossa gestão de estoque Excel

Como atualizar os estoques com fórmulas do Excel e VBA?

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:

  • Criar abas de Estoque e Caixa_Estoque
  • 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
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:

  • A primeira coisa a ser feita é apagar todas as informações da aba Estoque. A primeira linha do código dá um “clear” (apaga) todas as células da aba Estoque.
  • A segunda linha faz duas coisas: copia e cola informações. Copiaremos (através do copy VBA) toda a coluna de produtos (B) da aba Controle_de_Produtos, que serão coladas na aba Estoque, na célula A1.
  • Em seguida, preencheremos o resto do cabeçalho que “falta” na nossa tabela de estoque disponível. Na aba Estoque, em B1 será escrito “Compras”, em C1, “Vendas, e em D1, “Estoque”.
  • Na célula B2 escreveremos a fórmula SOMASES, somando tudo da coluna C da aba Controle_de_Produtos, desde que na coluna B da aba Controle_de_Produtos esteja o produto desejado (nesse caso dado pela célula A2 da aba Estoque), e que na coluna D da aba Controle_de_Produtos esteja escrito “Compra”
  • Na célula C2 escreveremos a fórmula SOMASES, somando tudo da coluna C da aba Controle_de_Produtos, desde que na coluna B da aba Controle_de_Produtos esteja o produto desejado (nesse caso dado pela célula A2 da aba Estoque), e que na coluna D da aba Controle_de_Produtos esteja escrito “Venda”
  • Na célula C2 escreveremos a fórmula de diferença entre C2 e B2 (C2-B2), para termos o valor de estoque resultante de compras após as vendas feitas (o que sobrou das compras)
  • Lembrando que as últimas três instruções utilizaram da propriedade FormulaLocal VBA, que permite utilizar as fórmulas do Excel no VBA exatamente como são escritas no Excel, sem tradução ou obrigatoriamente escrevendo as fórmulas em inglês

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.

Arrastar para Baixo no VBA com o método FillDown – Controle de estoque no VBA

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:

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

Como arrastar para baixo no VBA para atualizar os Estoques?

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:

  • 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
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:

  • A primeira coisa a ser feita é apagar todas as informações da aba Estoque. A primeira linha do código dá um “clear” (apaga) todas as células da aba Estoque.
  • A segunda linha faz duas coisas: copia e cola informações. Copiaremos (através do copy VBA) toda a coluna de produtos (B) da aba Controle_de_Produtos, que serão coladas na aba Estoque, na célula A1.
  • Em seguida, preencheremos o resto do cabeçalho que “falta” na nossa tabela de estoque disponível. Na aba Estoque, em B1 será escrito “Compras”, em C1, “Vendas, e em D1, “Estoque”.
  • Em seguida, vamos descobrir qual a última linha preenchida da aba Estoque, e armazenar na variável “linha”
  • Com essa informação, faremos a seguinte pergunta: qual o valor de “linha”?
  • Se linha for maior do que 1, apenas preencheremos a primeira linha de produtos (segunda linha da tabela) com as fórmulas já vistas na última aula
  • E se a linha for maior do que 2 (ou seja, tiver mais do que um produto e a linha da tabela for 3 ou maior), precisaremos também arrastar as fórmulas preenchidas da segunda linha, através da propriedade FillDown VBA. O preenchimento se dará da coluna B e segunda linha (B2) até a coluna D e a última linha da tabela de produtos, dada pela variável linha. Após isso, iremos fazer o cálculo de todas as fórmulas, para garantir que as fórmulas realizarão os cálculos de forma atualizada, e se fecha a nossa segunda condição
  • Logo após, realizaremos a cópia dos valores da tabela de produtos, e serão colados de forma especial, somente os valores, para que as fórmulas sejam “retiradas” da planilha, fazendo com que ela fique mais leve (caso se tenham muitos produtos, fará diferença)
  • Ao final, desligaremos o “tracejado” de cópia do Excel com o comando “CutCopyMode” em modo falso, e se encerra a nossa sub

Caixa de Listagem no VBA – Controle de estoque 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.

Evento DblClick no VBA – Atualizando a ListBox – Controle de estoque no VBA

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:

  • Complementar o código responsável por atualizar os estoques com fórmulas do Excel e VBA associadas.
  • Vamos aprender a carregar as informações de uma transação, que pode ser excluída, se necessário.

Como usar o evento DblClick VBA para carregar informações das transações?

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

Excluir Transação no VBA Dentro do Formulário – Controle de estoque no VBA

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:

  • Vamos aprender o código e os passos necessários para excluir as informações de uma transação do nosso formulário.

Como usar o Comando Delete VBA para Excluir Transações do Estoque?

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:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque
  • Duplo clique nele (com botão esquerdo do mouse) (em 1)
  • Duplo clique no botão de “Excluir” (em 2)
  • Inserir o código em seguida como uma nova Sub, que representará o clique do nosso botão
Controle De Estoque Excel
Controle De Estoque Excel
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:

  • Verificar se a caixa_id está vazia. Ou seja, se o usuário não der duplo clique em algum produto da caixa de listagem de transações (selecioná-lo), a caixa_id estará vazia, e não teremos o que excluir. Caso isso ocorra, exibiremos a mensagem para o usuário “Favor dar um duplo clique na transação a ser excluída” encerraremos nossa sub, porque não iremos excluir nada, pois precisa de algo selecionado para excluí-lo
  • Caso tenhamos um produto a ser excluído, ou seja, algum produto selecionado pelo usuário, encontraremos o último ID (transação) na planilha utilizando o Find VBA, e armazenaremos essa informação na variável linha, que irá guardar a linha em que aquele ID se encontra, na coluna A da aba Compras_e_Vendas
  • Após saber em que linha se encontra esse ID desejado, iremos excluí-la, excluindo então a transação com o Delete VBA
  • Após excluir a transação desejada, precisaremos zerar as caixas de texto de produto, quantidade, tipo, valor e id, e colocar na caixa de data a data de hoje, com o Format VBA
  • Após excluir, chamar as macros para atualizar a caixa de listagem de transações e de estoques, para atualizar as quantidades de produtos no estoque e de transações feitas pela nossa empresa
  • Ao final, exibir uma caixa de mensagem avisando que tudo deu certo, utilizando o MsgBox VBA.
  • E termina a nossa sub.

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:

  • Private Sub caixa_produto_Change()
  • Private Sub caixa_quantidade_Change()
  • Private Sub caixa_tipo_Change()
  • Private Sub caixa_valor_Change()
  • Private Sub caixa_data_Change()

Design da Planilha VBA – Ajustes Finais – Controle de estoque no VBA

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:

  • Fazer os ajustes finos necessários complementar nosso formulário, se tratando do design da planilha, e últimos ajustes de códigos.

Como Melhorar o Design da Nossa Planilha Final?

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:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque
  • Duplo clique nele (com botão esquerdo do mouse)
  • Duplo clique no botão “Salvar” do nosso formulário
  • Inserir o código em seguida como uma nova Sub, que representará o clique do nosso botão
Private Sub CommandButton2_Click()

ThisWorkbook.Save
MsgBox ("Planilha salva com sucesso!")

End Sub

Explicação do código acima (CommandButton2_Click()):

  • A primeira linha irá ser responsável por salvar a planilha atual (que tem o código escrito).
  • A segunda linha irá ser responsável por mostrar a mensagem “Planilha salva com sucesso!” em tela.

Ajustar a propriedade TabIndex das caixas e botões:

  • TabIndex = 1 para caixa_produto
  • TabIndex = 2 para caixa_quantidade
  • TabIndex = 3 para caixa_tipo
  • TabIndex = 4 para caixa_valor
  • TabIndex = 5 para caixa_data
  • TabIndex = 6 para botão “Adicionar”
  • TabIndex = 7 para botão “Excluir”

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:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar por EstaPastaDeTrabalho
  • Dar um duplo clique (com botão esquerdo)
  • Inserir um código abaixo
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:

  • abrir o arquivo com o programa maximizado (mesmo que esteja com a janela não maximizada, ela será maximizada)
  • ativar a aba “Exibir_Formulario”
  • o Excel será mostrado em tela cheia VBA (DisplayFullScreen VBA marcada como True)
  • não serão demonstradas as linhas de grade VBA (DisplayGridlines VBA marcada como False)
  • não serão demonstrados os títulos VBA (DisplayHeadings VBA marcada como False)
  • ocultar abas no VBA (DisplayWorkbookTabs VBA marcada como False)
  • não será mostrada a barra de fórmulas VBA (DisplayFormulaBar VBA marcada como False)
  • Mostrar o formulário de controle de estoque
  • Desativar a atualização de tela (tela piscando ao realizar ações no Excel)
  • Encerra-se a nossa sub

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:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque
  • Duplo clique nele (com botão esquerdo do mouse)
  • Inserir o código abaixo:
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:

  • o Excel não será mostrado em tela cheia VBA (DisplayFullScreen VBA marcada como False)
  • serão mostradas as linhas de grade VBA (DisplayGridlines VBA marcada como True)
  • serão mostrados os títulos VBA (DisplayHeadings VBA marcada como True)
  • mostrar as abas (DisplayWorkbookTabs VBA marcada como True)
  • será mostrada a barra de fórmulas VBA (DisplayFormulaBar VBA marcada como True)
  • Ativar a atualização de tela (tela piscando ao realizar ações no Excel)
  • Encerra-se a nossa sub

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:

  • Inserir > Ilustrações
  • Escolher uma forma qualquer para servir de botão
  • Colocaremos um texto para identificar a nossa ação
  • Formato de forma > Efeitos de Forma > Predefinição 2
  • Abrir o VBA > Inserir > Módulo > Criar macro de abertura do formulário para ser associada ao botão (precisa ser uma macro dentro de um Módulo), de acordo com o código a seguir:
Sub mostra_formulario_estoque()

FormularioControleEstoque.Show

End Sub
  • Botão direito no botão > Atribuir macro… > Clicar em “mostra_formulario_estoque” e OK, em seguida. Pronto, nosso botão já irá abrir o formulário por executar a macro acima.

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

Botão de Imprimir no VBA – Formulário de 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:

  • Inserir um botão para imprimir o estoque disponível e os tipos de transações desejadas para análise

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:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque
  • Duplo clique nele (com botão esquerdo do mouse)
  • Copiar um dos botões azuis já prontos
  • Mudar a propriedade Caption do novo botão para “Imprimir”
  • Ajeitar tamanho e fonte, se necessário
  • Dar duplo clique nesse botão, para inserir o código necessário para imprimir ao clicá-lo
  • Inserir o código em seguida como uma nova Sub, que representará o clique do nosso botão
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:

  • Inicialmente a macro vai fazer a limpeza das completa das células (formato, valores, fonte etc) da aba “Impressao” criada para armazenar as tabelas a serem impressas
  • Na célula A1 da aba Impressao será escrito “Estoque Disponível”, que será o título da primeira tabela, de produtos do estoque
  • Serão mescladas as células de A1 até D1
  • O negrito será aplicado à fonte das células da linha 1 da aba Impressao
  • Em seguida, usaremos da função CurrentRegion VBA para selecionar o intervalo de células preenchidas a partir da Célula A1 da aba Caixa_Estoque, copiaremos esse intervalo e colaremos na célula A3 da aba de Impressao
  • Após isso, armazenaremos na variável linha_vazia a informação da linha que devemos colocar o próximo título, o de transações. Ele ficará duas linhas abaixo da última linha preenchida da coluna A (por isso +2)
  • Então, a célula da coluna A (primeira coluna), e referente à linha que queremos preencher, dada pela variável linha_vazia, vai receber o texto “Transações”, que será o nosso título da tabela de transações
  • Mesclar e centralizar as células dessa linha dada pela variável linha_vazia, da coluna A até a coluna F
  • O negrito será aplicado à fonte das células da linha dada pela variável linha_vazia, da aba Impressao
  • Em seguida, usaremos da função CurrentRegion VBA para selecionar o intervalo de células preenchidas a partir da Célula A1 da aba Caixa_Compras_e_Vendas, copiaremos esse intervalo e colaremos na célula da coluna A, mas duas linhas abaixo da linha dada pela variável linha_vazia, da aba de Impressao, para que fique 2 linhas abaixo do título de transações
  • Em seguida será aplicada a função de AutoFit VBA, que faz com que todas as colunas da aba Impressao sejam autoajustadas para os tamanhos mínimos para caberem todos os dados/valores das células
  • E também serão aplicadas em todas as linhas da aba Impressao o alinhamento ao centro (xlhaligncenter VBA), da propriedade alinhamento horizontal (horizontalalignment VBA)
  • Descarregaremos (Unload) o formulário (Me)
  • Ao final da macro, você deve optar pela propriedade de PrintPreview VBA, para ver se está tudo correto com a impressão, e se quiser imprimir após manualmente. Ou se irá usar a outra propriedade, a de PrintOut VBA, que já imprime direto o que tem na nossa aba Impressao

Baixar Relatório no VBA – Download em PDF – Controle de estoque no VBA

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:

  • Inserir um botão para baixar planilha em PDF com VBA que tenha o estoque disponível e os tipos de transações desejadas para análise

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:

  • Abrir o VBA, com Alt(+Fn)+F11
  • Procurar pelo FormularioControleEstoque
  • Duplo clique nele (com botão esquerdo do mouse)
  • Copiar um dos botões azuis já prontos
  • Mudar a propriedade Caption do novo botão para “PDF”
  • Ajeitar tamanho e fonte, se necessário
  • Dar duplo clique nesse botão, para inserir o código necessário para imprimir ao clicá-lo
  • Inserir o código em seguida como uma nova Sub, que representará o clique do nosso botão
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:

  • O código acima vai fazer todo o passo a passo do explicado na última aula, a décima nona da série (LINK), com exceção do final.
  • Em vez de imprimir o relatório de estoque e transações, iremos aqui estabelecer um caminho para ser armazenado o PDF no computador, que será armazenado na variável caminho
  • E depois iremos exportar a aba Impressao como um formato fixo (ExportAsFixedFormat VBA), do tipo PDF: o nome do arquivo será o que estiver armazenado na variável caminho, com qualidade padrão, não incluindo propriedades do documento (planilha), e após ser gerado o PDF, ele será aberto (abrir após publicar o PDF).
  • E se encerra a sub

Conclusão

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!

Hashtag Treinamentos

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


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!