Hoje eu quero mostrar para vocês um Sistema de Controle para Empresas e nas próximas aulas vou te ensinar a construir ele do zero!
Esta é uma aula de introdução, vou te apresentar aqui todo o projeto. A partir da próxima aula vamos começar a construir o Sistema de Controle começando do ZERO!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, galera da Hashtag! Hoje nós vamos dar início a uma nova série de VBA: a Série Controle para Empresas.
Na aula de hoje vamos te apresentar o sistema de controle para empresas Excel, onde vamos utilizar um formulário no Excel, para te mostrar como fazer controle de empresas.
Nesse sistema de controle no Excel você vai poder acessar o menu de compras, vendas, estoque, caixa e até DRE.
E aí, está preparado para aprender como fazer automação no Excel com VBA para ter o seu controle de empresas no Excel?
Então vamos pra aula que você vai poder construir o seu próprio sistema e fazer todas as modificações que precisar para atender suas necessidades de controle!
Menu
Abaixo temos o nosso menu de botões, que vai acessar as “páginas” que preparamos, com funções específicas: Compras, Vendas, Estoque, Caixa e DRE. Veja abaixo:
Cada uma possui uma especificidade e função que vai te ajudar a controlar as atividades da sua empresa!
Compras
A página de compras vai nos proporcionar cadastrar e ter uma lista de produtos que pretendemos comprar ou de fato compramos de diversos fornecedores.
Nela teremos ID do produto, Data de Pagamento, Data de Competência, Fornecedor (nome), Produto (nome) e Quantidade.
Controlando as compras, saberemos as quantidades que já temos compradas, histórico, fornecedores mais frequentes, por exemplo. Veja abaixo:
Vendas
A página de vendas vai nos proporcionar cadastrar e ter uma lista de produtos que vendemos para diversos clientes.
Nela teremos ID do produto, Data de Pagamento, Data de Competência, Cliente (nome), Produto (nome) e Quantidade.
Controlando as vendas, saberemos as quantidades que já temos vendidas, histórico dessas operações, clientes mais frequentes, por exemplo. Observe:
Estoque
A página de estoque vai nos proporcionar o resumo entre as operações de compra e venda das páginas anteriores, onde cadastramos essas compras e vendas, respectivamente.
Nela teremos o resumo de cada produto individualmente: quantidade comprada, vendida, e o que ficou em estoque daquele produto específico após essas operações.
Importantíssimo controle da empresa, para poder fazer futuras vendas, futuras compras e controlar o estoque perante os fornecedores e clientes. Suporta a decisão de quando comprar, se pode vender e a quantidade que pode vender.
Caixa
A página do caixa vai conter todas as movimentações feitas na nossa planilha/sistema. Todo registro de vendas e compras, além de algumas despesas do dia a dia da sua empresa.
Assim, tem em um local, tudo que aconteceu na sua empresa.
DRE
A página da DRE (Demonstração do Resultado de Exercício) vai conter um resumo-resultado contendo o que sua empresa gastou e recebeu proveniente das atividades da empresa.
Assim, representa um resultado final das operações da sua empresa.
Te dará, ao final do processo, o lucro/prejuízo líquido das atividades. Observe como é composto:
Hoje eu vou dar início ao Controle para Empresas Aula1 e nessa aula eu já vou te ensinar a construir a estrutura da planilha que vamos usar!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Esse é o Controle para Empresas Aula1 da nossa Série e nessa aula nós vamos te mostrar como construir a estrutura da planilha inicial.
Então vou te ensinar como formatar tabela no Excel e como usar fórmulas básicas no Excel já para fazer alguns cálculos que vamos precisar.
Dessa forma você vai aprender como criar planilhas no Excel com todas as informações que precisa, podendo alterar para a sua empresa.
Assim vai conseguir criar controles para empresas no Excel e fazer suas alterações para deixar um sistema mais personalizado para sua própria empresa!
E aí, animado para começar essa nova série e construir mais um projeto irado em VBA? Então vamos pra aula que essa série vai juntar conhecimentos de outras séries que temos aqui no canal!
Criando as abas
Aba Compras
Nela teremos ID do produto, Data de Pagamento, Data de Competência, Fornecedor (nome), Produto (nome), Quantidade e Custo Total.
Essas informações irão servir de base para a página do formulário que montaremos na série, mais pra frente.
Observe um exemplo feito abaixo na aula:
Aba Vendas
Nela teremos ID do produto, Data de Pagamento, Data de Competência, Cliente (nome), Produto (nome), Quantidade, Valor da Venda, Custo Unitário e Custo da Venda.
Essas informações irão servir de base para a página do formulário que montaremos na série, mais pra frente.
Observe um exemplo feito abaixo na aula:
Aba Estoque
Nela teremos o resumo de cada produto individualmente: quantidade comprada, vendida, e o que ficou em estoque daquele produto específico após essas operações.
Essas informações irão servir de base para a página do formulário que montaremos na série, mais pra frente.
Observe um exemplo feito abaixo na aula:
Aba Caixa
A página do caixa vai conter todas as movimentações feitas na nossa planilha/sistema. Todo registro de vendas e compras, além de algumas despesas do dia a dia da sua empresa.
Ela terá as informações de ID, Data do Pagamento, Data de Competência, Descrição, Tipo Conta, Valor e Status.
Essas informações irão servir de base para a página do formulário que montaremos na série, mais pra frente.
Observe um exemplo feito abaixo na aula:
Aba DRE
Essas informações irão servir de base para a página do formulário que montaremos na série, mais pra frente.
Nele teremos a Receita Bruta, Deduções da Receita, Receita Líquida, CMV (Custo de Mercadorias Vendidas), Resultado Bruto, Despesas Operacionais, Resultado antes do Imposto de Renda (I.R.), I.R. e Resultado Líquido.
Observe um exemplo feito abaixo na aula:
Abaixo mostramos as fórmulas que compõem a estrutura do nossos DRE.
As células que estão como valor seguem como valor, e as células que começam com um “=” estão com uma fórmula em seu interior. Acompanhe:
OBS: Formatações diversas
Em todas as abas usamos a formatação da cor de fundo da célula (popularmente conhecido como “baldinho”) e colocamos a fonte na cor branca, e com tipo negrito ativado. Observe:
Formatamos também o tipo de dado na célula de acordo com o tipo desejado, como Data, Moeda, Número inteiro, Número com casas decimais, e deixamos algumas como Geral.
Lembrando que para alterar o tipo de dado de uma célula utilizamos o atalho Ctrl+1.
Hoje no Controle para Empresas Aula2 eu vou te mostrar como construir a base do seu formulário para dar forma ao nosso sistema!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a segunda aula da nossa série, nela iremos construir a base do nosso formulário apresentado nas aulas anteriores (e que será incrementado nas próximas aulas).
Nessa parte você vai aprender como inserir objetos no formulário. Dentre esses objetos temos:
Outro ponto muito importante que eu vou te mostrar é como salvar arquivo com macro no Excel, pois toda vez que você utilizar o VBA tem que mudar o tipo do arquivo.
Vai mudar para Pasta de Trabalho Habilitada para Macro do Excel, dessa forma vai conseguir salvar e utilizar seu arquivo normalmente.
Vamos então para o conteúdo do post de hoje!
Criando o UserForm
Para criar o UserForm, precisamos:
Nesse momento se abrirá a tela dentro do ambiente do VBA o nosso UserForm, na forma de uma minicaixa vazia (cinza) que tem escrito UserForm1 em seu cabeçalho (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 no canto inferior esquerdo, na imagem acima) 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 nosso formulário
Para customizar o nosso formulário conforme queremos, 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) Tamanho do formulário
No seu canto inferior direito, no “quadrado” branco, vamos clicar e arrastar para dimensionarmos o userfom do tamanho que queremos que ele fique, ao final.
1) Mudar o seu nome (nome do objeto)
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 “ControleDaEmpresa”. Repare que o nome não pode ter caractere espaço (pode ser uma alternativa utilizar o “_”).
2) Título do formulário
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 “Controles da Empresa”. Repare que aqui podemos escrever qualquer coisa, inclusive o caractere espaço.
3) Objeto multi-página
Para criar objetos, usaremos a caixa de ferramentas. Vamos criar um objeto multi-página para o nosso formulário ao escolher “Multi-página” na caixa de ferramentas.
Iremos clicar dentro do nosso UserForm com o botão esquerdo do mouse, e redimensionar (arrastando o mouse e soltando) a multi-página de acordo com o tamanho que queremos.
Após isso, com ela selecionada, podemos mudar:
Observe o formulário após aplicar mudanças nas etapas anteriores:
4) Modificar as páginas
Agora precisamos modificar cada página do nosso objeto multi-página criado. Para isso, iremos:
Como faço para ver meu formulário?
Para ver como nosso formulário “está” no ambiente do Excel, é só apertar nele (ou dar duplo clique nele no menu de hierarquia do VBA, no canto superior esquerdo, dentro da pasta “Formulários”) e ir ao ícone de play (>) na parte superior do VBA ou pelo atalho do teclado F5.
Dê uma olhada como fica no nosso exemplo, após de todas as mudanças da aula:
Salvar arquivo habilitado para macro
Para salvar a planilha com o formato .xlsm, você deve:
Hoje no Controle para Empresas Aula3 nós vamos iniciar a parte visual do formulário para inserir todos os elementos necessários!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, pessoal! Estamos na terceira aula da nossa série, nessa aula nós vamos nos propor a construir a parte visual da aba de compras do formulário.
Como ainda estamos na parte de como criar formulário no VBA, precisamos montar toda a estrutura visual que será utilizada e apresentada na hora de fazer os controles mais na frente da série.
Vamos te mostrar como inserir rótulo no formulário, que nada mais é do que um “título” ou texto que será mostrado ao usuário que é fixo. Vamos utilizá-lo justamente para identificar as informações do formulário.
Em seguida vamos aprender como inserir caixa de texto no VBA, que é onde o próprio usuário vai poder ver ou escrever as informações de fato.
E, por fim, como inserir caixa de listagem no VBA. Essa ferramenta vai permitir o usuário visualizar e selecionar as informações disponíveis.
E aí, vamos seguir com a construção do nosso formulário?
Acessando o UserForm
Para acessar o UserForm, precisamos:
Customização do nosso formulário
Para customizar o nosso formulário conforme queremos, 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.
OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up (janela flutuante no canto inferior esquerdo, na imagem acima) 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.
A descrição de ações a seguir dizem respeito à criação dos primeiros objetos criados e formatados dentro do formulário.
A partir da criação de um primeiro objeto de um tipo (rótulo, caixa de texto, botão de comando e caixa de listagem), copiaremos esse objeto (dando Ctrl+C no objeto selecionado e Ctrl+V dentro do formulário) inteiro e apenas modificaremos pouca coisa, preservando já o trabalho feito e a forma criada.
Rótulo
Precisaremos inserir rótulos, que serão os “títulos” dos nossos dados que aparecem no formulário, de fato.
Para isso, temos que, com a caixa de ferramenta aberta:
Personalizando o rótulo:
Caixa de texto
Precisaremos inserir algumas caixas de texto, que serão os “espaços” específicos em que estarão escritos os nossos dados.
Para isso, temos que, com a caixa de ferramenta aberta:
Botão de comando
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
Personalizando o botão de comando (CommandButton):
Caixa de listagem
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
Ao final da criação dos objetos, nosso formulário ficará da seguinte maneira:
Hoje no Controle para Empresas Aula4 nós vamos criar a parte visual da aba de vendas do formulário para termos tudo organizado!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a quarta aula (Controle para Empresas Aula4) da nossa série, nessa aula nós vamos construir a parte visual da aba de vendas do formulário.
Essa parte é um pouco mais fácil porque nas aulas anteriores você já viu como inserir rótulo no formulário, como inserir caixa de texto, como inserir caixa de listagem…
Dessa vez nós vamos apenas copiar o que já fizemos, colar na aba de vendas e fazer as alterações necessárias, até porque as abas possuem informações bem parecidas.
Dessa forma você pode evitar ter que fazer todo o trabalho de novo, e vai precisar apenas modificar alguns dos rótulos para ajustar ao conteúdo dessa aba.
Por questão de didática vamos tornar a explicar como inserir os objetos também, caso seja de sua vontade aprender ou relembrar os passos.
Acompanhe com a gente!
Acessando o UserForm
Para acessar o UserForm, precisamos:
Customização do nosso Formulário VBA
Para customizar o nosso formulário conforme queremos, 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.
OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up 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.
As descrições de ações a seguir dizem respeito à criação dos objetos criados e formatados dentro do formulário, que é um espelho (já criado na aula 3).
Página de Vendas
A partir da criação de um primeiro objeto de um tipo da página de Compras apresentado na aula anterior (rótulo, caixa de texto, botão de comando e caixa de listagem), copiaremos esses objetos (dando Ctrl+C no objeto selecionado e Ctrl+V dentro do formulário) inteiros.
Vamos apenas modificar poucas coisas, preservando já o trabalho feito e a forma criada.
Caso você não se lembre como fazer para criar os objetos do zero, vamos te ensinar a seguir.
Como inserir rótulo no formulário
Precisaremos inserir rótulos, que serão os “títulos” dos nossos dados que aparecem no formulário, de fato.
Para isso, temos que, com a caixa de ferramenta aberta:
Personalizando o rótulo:
Como inserir caixa de texto no VBA
Precisaremos inserir algumas caixas de texto, que serão os “espaços” específicos em que estarão escritos os nossos dados.
Para isso, temos que, com a caixa de ferramenta aberta:
Botão de comando
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
Personalizando o botão de comando (CommandButton):
Como inserir caixa de listagem no VBA
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
Ao final dos procedimentos citados ficaremos com a seguinte formatação:
Além desses procedimentos de criação de objetos, precisaremos dar nomes aos nossos objetos para preparar o formulário futuramente para os códigos.
É extremamente importante identificar/nomear cada objeto de forma correta, porque futuramente eles serão referenciados ou citados no código, e eles serão atores fundamentais nos códigos executados.
Portanto, para nomear cada objeto, vamos seguir a seguinte lógica:
Observe os objetos e seus respectivos nomes:
1) CxIDVendas 2) CxDataPVendas 3) CxDataCVendas 4) CxClienteVendas 5) CxProdutoVendas 6) CxQuantidadeVendas 7) CxValorVendaVendas 8) CxContaVendas 9) CxStatusVendas 10) CxCustoUVendas 11) CxCustoVVendas 12) CxListagemVendas
Para os botões, teremos: BtMenuVendas, BtAdicionarVendas, BtExcluirVendas, BtAlterarVendas e BtLimparVendas.
OBS: Vamos fazer essa mesma nomeação da mesma forma e lógica que fizemos acima (respeitando o tipo do objeto, a função e o nome da página) para a aba de Compras.
Hoje no Controle para Empresas Aula5 nós vamos finalizar a parte visual do formulário para depois configurar cada um dos elementos!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a quinta aula (Controle para Empresas Aula5) da série, nessa aula nós vamos finalizar a parte visual do formulário no VBA.
Como já fizemos nas outras aulas esse processo fica muito mais fácil agora que já conhece todas as ferramentas.
Como as estruturas são bem parecidas nós vamos copiar caixa de listagem, rótulos, caixas de texto para que possamos finalizar as abas que ficaram faltando.
Com isso vamos terminar a parte visual e agora você já deve estar sabendo das ferramentas básicas utilizadas para a construção de um formulário, não é mesmo?
Essa parte é muito importante, pois é a parte visual que é onde o usuário vai interagir com esse controle, então precisamos que todas as informações estejam corretas!
Claro que você sempre vai poder fazer alterações no formulário caso precise!
Acompanhe com a gente!
Acessando o UserForm
Para acessar o UserForm, precisamos:
Customização do nosso Formulário VBA
Para customizar o nosso formulário conforme queremos, 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.
OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up 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.
As descrições de ações a seguir dizem respeito à criação dos objetos criados e formatados dentro do formulário, que é um espelho (criado na aula 3 e também na Aula 4 da Série).
Página de Caixa
A partir da criação de um primeiro objeto de um tipo da página de Compras e Vendas apresentados nas aulas anteriores (rótulo, caixa de texto, botão de comando e caixa de listagem), copiaremos esses objetos (dando Ctrl+C no objeto selecionado e Ctrl+V dentro do formulário) inteiros.
Vamos apenas modificar poucas coisas, preservando já o trabalho feito e a forma criada.
Mas, para você que não sabe ou quer relembrar, vamos aos passos necessários para criar as formas/objetos.
Como inserir rótulo no formulário
Precisaremos inserir rótulos, que serão os “títulos” dos nossos dados que aparecem no formulário, de fato.
Para isso, temos que, com a caixa de ferramenta aberta:
Personalizando o rótulo:
Como inserir caixa de texto no VBA
Precisaremos inserir algumas caixas de texto, que serão os “espaços” específicos em que estarão escritos os nossos dados.
Para isso, temos que, com a caixa de ferramenta aberta:
Botão de comando
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
Personalizando o botão de comando (CommandButton):
Como inserir caixa de listagem no VBA
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
Ao final dos procedimentos citados ficaremos com a seguinte formatação:
Além desses procedimentos de criação de objetos, precisaremos dar nomes aos nossos objetos para preparar o formulário futuramente para os códigos.
É extremamente importante identificar/nomear cada objeto de forma correta, porque futuramente eles serão referenciados ou citados no código, e eles serão atores fundamentais nos códigos executados.
Portanto, para nomear cada objeto, vamos seguir a seguinte lógica:
Página de Estoque
A página de estoque é bem simples: vamos copiar o botão de “Menu” de outra página (Compra, Vendas ou Caixa), e colaremos nessa aba.
Também aproveitaremos a forma pronta de caixa de listagem de outra página (Compra, Vendas ou Caixa), colaremos aqui na aba de Estoque e aumentaremos seu tamanho.
OBS: Da mesma forma e lógica que nomeamos os objetos nas outras páginas, faremos para essa página.
Observe nossa página de Estoque:
Página de DRE
A página de DRE é bem simples também: vamos copiar o botão de “Menu” de outra página (Compra, Vendas ou Caixa), e colaremos nessa página duas vezes. Um vai fazer a mesma função, de ir para o Menu, e o outro para “Carregar o DRE”.
Também aproveitaremos as formas prontas de rótulo e de caixa de texto (Compra, Vendas ou Caixa), colaremos aqui na aba de Estoque e posicionaremos da melhor forma.
Por final, precisaremos criar uma nova forma: a caixa de imagem.
Objeto Imagem
Precisaremos inserir um objeto-imagem, que representará o resultado do nosso DRE no formulário, de fato.
Para isso, temos que, com a caixa de ferramenta aberta:
Observe nossa página de DRE:
OBS: Da mesma forma e lógica que nomeamos os objetos nas outras abas, faremos para essa aba.
Página de Menu
A página de DRE é bem simples também: vamos copiar o botão de “Menu” de outra aba (Compra, Vendas ou Caixa), e colaremos nessa página cinco vezes. Cada botão vai representar uma página do nosso formulário (com exceção do Menu, onde estamos).
Os botões terão os nomes de: Vendas, Compras, Estoque, Caixa e DRE.
Faremos uma única modificação em relação ao botão normal:
Observe nossa página de Menu:
OBS: Da mesma forma e lógica que nomeamos os objetos nas outras páginas, faremos para essa página.
Hoje no Controle para Empresas Aula6 eu vou iniciar a inteligência do formulário para que você consiga interagir com o que já criamos!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a sexta aula da série, nela vamos começar a lidar com a inteligência do formulário no VBA.
Essa inteligência inicialmente vai ser como alterar as abas com VBA. Ou seja, como alterar as abas do formulário com o VBA para que o nosso menu seja interativo e facilite a seleção pelo usuário.
Para que a gente possa criar essa macro para o clique de um botão (executar macro ao clicar em um botão) nós vamos sempre pensar na lógica de programação no VBA.
Essa é uma parte mais inicial, e nós vamos utilizar bastante o que vamos fazer nessa aula, que é atribuir ações aos botões no VBA.
Então vamos dizer para o VBA o que vai acontecer quando a gente clicar em um botão específico, que vai consequentemente disparar uma ação.
Até o momento na série nós ajustamos a parte visual do formulário. Agora vamos ajustar a parte prática e de inteligência de códigos para deixar tudo funcionando conforme a série for avançando.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Hoje vamos fazer ver os eventos que vão atuar nos cliques dos diversos botões que temos no nosso Formulário ControleDaEmpresa.
Acompanhe os eventos representados nos códigos abaixo:
Private Sub BtMenuCaixa_Click()
BlocoDeAbas.Value = 0
End Sub
Private Sub BtMenuCompras_Click()
BlocoDeAbas.Value = 0
End Sub
Private Sub BtMenuDRE_Click()
BlocoDeAbas.Value = 0
End Sub
Private Sub BtMenuEstoque_Click()
BlocoDeAbas.Value = 0
End Sub
Private Sub BtMenuVendas_Click()
BlocoDeAbas.Value = 0
End Sub
Private Sub BtComprasMenu_Click()
BlocoDeAbas.Value = 1
End Sub
Private Sub BtVendasMenu_Click()
BlocoDeAbas.Value = 2
End Sub
Private Sub BtEstoqueMenu_Click()
BlocoDeAbas.Value = 3
End Sub
Private Sub BtCaixaMenu_Click()
BlocoDeAbas.Value = 4
End Sub
Private Sub BtDREMenu_Click()
BlocoDeAbas.Value = 5
End Sub
Explicação dos códigos acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Hoje no Controle para Empresas Aula7 vamos criar uma macro para poder limpar os campos do formulário e facilitar para o usuário final!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a sétima aula da série, nela vamos criar a macro para limpar as informações do formulário.
Isso é muito útil, pois não é interessante que o usuário tenha que ficar apagando as informações de uma por uma, então eu vou te ensinar como limpar campos do formulário no VBA com uma macro.
Para essa macro nós vamos utilizar conhecimentos das aulas anteriores, mas vou te mostrar a estrutura de repetição for each no VBA e como fazer comparações no VBA.
Essa comparação será feita com o IF para que você consiga verificar se uma determinada comparação é verdadeira ou falsa e para cada resultado você pode escrever um código.
Então se estiver de acordo com a sua comparação vamos apagar a caixa de texto, caso contrário podemos apenas passar para a próxima verificação!
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Como não temos nenhum módulo criado antes nessa planilha, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Colocaremos a seguinte sub (código), que será o objeto de estudo da aula de hoje:
Sub limparCamposDoFormulario()
Dim forma As Object
For Each forma In ControleDaEmpresa.BlocoDeAbas.Pages(ControleDaEmpresa.BlocoDeAbas.Value).Controls
If TypeName(forma) = "TextBox" Then
forma.Value = ""
End If
Next
End Sub
Comentários a respeito da sub limparCamposDoformulario():
O código acima vai ser utilizado por vários botões “Limpar” do nosso formulário. Por isso criamos apenas um código dentro de um módulo específico e separado.
Vamos “chamar” esse mesmo código universal por todos os botões “Limpar”. Independentemente da página e dos nomes das caixas de textos dela, ele irá interpretar as comparações e fará a limpeza das caixas necessárias.
OBS1: Caso queira aprender mais sobre estrutura de repetição For Each, indicamos esse outro post aqui que te ensina com detalhes.
OBS2: Além disso, explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário:
Private Sub BtLimparCaixa_Click()
Call limparCamposDoFormulario
End Sub
Private Sub BtLimparCompras_Click()
Call limparCamposDoFormulario
End Sub
Private Sub BtLimparVendas_Click()
Call limparCamposDoFormulario
End Sub
Explicação dos códigos acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Hoje no Controle para Empresas Aula8 nós vamos estar atualizando a caixa de listagem da aba de compras para deixar automático!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a oitava aula da série, nessa aula vamos atualizar caixa de listagem no formulário VBA.
Dessa forma vamos poder obter os dados de forma automática na aba de compras, e mostrar todas essas informações dentro do nosso formulário.
A ideia é te mostrar como atualizar caixa de listagem no VBA, para que esse procedimento fique automático, e o usuário já consiga visualizar tudo o que tem na aba de compras diretamente no formulário.
Vamos criar macros para formulário e nela vamos aprender como pegar última linha no VBA (última linha preenchida da tabela), como selecionar uma aba específica e algumas configurações da caixa de listagem.
Com isso vamos poder atualizar e configurar a visualização dos nossos dados dentro da caixa de listagem como se fosse uma tabela mesmo, só que dentro do formulário ao invés de visualizar dentro do Excel.
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado na aula.
Para isso, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Sub atualizaCaixaDeListagemCompras()
Dim abaCompras As Object
Dim ultLin As Long
Set abaCompras = Sheets("Compras")
ultLin = abaCompras.Range("A1000000").End(xlUp).Row
ControleDaEmpresa.CxListagemCompras.ColumnCount = 7
ControleDaEmpresa.CxListagemCompras.ColumnHeads = True
ControleDaEmpresa.CxListagemCompras.ColumnWidths = "50;120;140;90;74;74;100"
ControleDaEmpresa.CxListagemCompras.RowSource = "Compras!A2:G" & ultLin
End Sub
Explicação do código acima:
Até aqui construímos o código que representa a configuração da nossa caixa de listagem da página de compras do nosso formulário.
O que queremos aqui é chamar aquela função por uma ação, que vai chamar esse código de configuração cada vez que a página de “Compras” for acionada no formulário ControleDaEmpresa.
Então iremos colocar essa função para disparar quando o nosso formulário ControleDaEmpresa for inicializado (UserForm Initialize).
Teremos uma sub privada, ou seja, que só vai funcionar dentro do código do nosso formulário, que irá chamar a sub atualizaCaixaDeListagemCompras (criada acima), e assim mostrar as informações na caixa de listagem (CxListagemCompras), quando o nosso formulário for aberto.
Acessando o código do formulário
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.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub UserForm_Initialize()
Call atualizaCaixaDeListagemCompras
End Sub
Explicação do código acima:
Após esse código ser executado, o nosso formulário vai ter a seguinte cara (quando for iniciado):
Hoje no Controle para Empresas Aula9 vamos atualizar a caixa de listagem da aba vendas e caixa igual fizemos na aula anterior!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a nona aula (Controle para Empresas Aula9) da série, nessa aula vamos continuar com a atualização da caixa de listagem, mas agora para outras páginas do nosso formulário.
Como na última aula nós já fizemos essa atualização, você já deve saber como atualizar caixa de listagem no VBA, não é mesmo?
Mas é sempre bom relembrar, porque a repetição acaba sendo muito boa para o aprendizado. Então vamos repetir alguns comandos da macro para essa atualização.
Além da atualização nós vamos fazer também a configuração da caixa de listagem no VBA para que as informações apareçam da forma correta e formatada.
Isso vai permitir com que o usuário consiga visualizar os dados do VBA Forms de forma eficiente sem ter que acessar os dados dentro do Excel para isso!
E aí, vamos a construção dessa macro para caixa de listagem? Lembrando que você vai poder já copiar parte do código que já fizemos e só fazer algumas alterações!
Acessando o VBA
Para modificar/criar códigos, precisamos primeiramente abrir o ambiente de VBA. A partir do atalho do teclado Alt(+Fn)+F11 conseguimos fazer isso.
Vamos em seguida acessar o módulo já criado na aula anterior chamado “modAtualizarCaixaListagem”. Com um duplo clique entramos no módulo:
Lá vamos colocar dois novos códigos para atualizar/configurar a caixa de listagem das páginas de Vendas e Caixa do nosso formulário. Acompanhe a seguir os códigos:
Sub atualizaCaixaDeListagemVendas()
Dim abaVendas As Object
Dim ultLin As Long
Set abaVendas = Sheets("Vendas")
ultLin = abaVendas.Range("A1000000").End(xlUp).Row
ControleDaEmpresa.CxListagemVendas.ColumnCount = 9
ControleDaEmpresa.CxListagemVendas.ColumnHeads = True
ControleDaEmpresa.CxListagemVendas.ColumnWidths = "50;120;140;90;74;74;100;100;100"
ControleDaEmpresa.CxListagemVendas.RowSource = "Vendas!A2:I" & ultLin
End Sub
Explicação do código acima:
Sub atualizaCaixaDeListagemCaixa()
Dim abaCaixa As Object
Dim ultLin As Long
Set abaCaixa = Sheets("Caixa")
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
ControleDaEmpresa.CxListagemCaixa.ColumnCount = 8
ControleDaEmpresa.CxListagemCaixa.ColumnHeads = True
ControleDaEmpresa.CxListagemCaixa.ColumnWidths = "50;120;140;90;74;74;100;100"
ControleDaEmpresa.CxListagemCaixa.RowSource = "Caixa!A2:H" & ultLin
End Sub
Explicação do código acima:
Até aqui construímos o código que representa a configuração das nossas caixas de listagem das páginas de Vendas e Caixa do nosso formulário.
O que queremos aqui é chamar aquela função por uma ação, que vai chamar esse código de configuração cada vez o formulário ControleDaEmpresa for aberto.
Então iremos colocar essa função para disparar quando o nosso formulário ControleDaEmpresa for inicializado (UserForm Initialize).
Teremos uma sub privada, ou seja, que só vai funcionar dentro do código do nosso formulário, que irá chamar a sub atualizaCaixaDeListagemVendas e atualizaCaixaDeListagemCaixa (criada acima), e assim mostrar as informações nas caixas de listagem (CxListagemVendas e CxListagemCaixa), quando o nosso formulário for aberto.
Acessando o código do formulário
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.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub UserForm_Initialize()
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
End Sub
Explicação do código acima:
Após esse código ser executado, o nosso formulário vai ter a seguinte cara (quando for iniciado) para as abas de Vendas e Caixa:
Macro para abrir o formulário
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Para isso, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Vamos dedicar um módulo apenas para essa macro que tem a simples função de abrir o formulário, que será a seguir:
Sub abrirFormulario()
ControleDaEmpresa.Show
End Sub
Atribuindo macro a um botão (abrir o formulário com um botão)
Para atrelar o código aos nossos botões criados em cada aba, no Excel, temos que:
Hoje no Controle para Empresas Aula10 nós vamos iniciar a construção da nossa aba de estoque para poder mostrar os nossos itens!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima aula (Controle para Empresas Aula10) da série, nessa aula nós vamos iniciar a construção da aba de estoque no formulário VBA!
Para fazer isso nós vamos utilizar o que já temos para atualizar caixa de listagem no VBA, então vamos poder copiar o código da outra aba e apenas fazer alguns ajustes.
Isso é muito útil, pois não precisa reescrever todo o código, então vamos fazer esses pequenos ajustes para não ter todo o trabalho novamente.
Outros dois pontos que vamos abordar e que já até colocamos links dos vídeos na aula é sobre a função SOMASE no Excel e sobre o Worksheetfunction no VBA que te permite utilizar uma função do Excel dentro do VBA.
Outra parte importante que temos no código e a parte de registrar informações do formulário no Excel, dessa forma você consegue atualizar os dados do Excel.
E depois vamos conseguir puxar esses dados para atualizar a caixa de listagem com macros VBA para deixar tudo automático!
Acessando o VBA
Para modificar/criar códigos, precisamos primeiramente abrir o ambiente de VBA. A partir do atalho do teclado Alt(+Fn)+F11 conseguimos fazer isso.
Vamos em seguida acessar o módulo já criado na aula anterior chamado “modAtualizarCaixaListagem”. Com um duplo clique entramos no módulo:
Lá vamos colocar um novo código para atualizar/configurar a caixa de listagem da página de Estoque do nosso formulário. Acompanhe a seguir o código:
Sub atualizaCaixaDeListagemEstoque()
Dim abaEstoque As Object, abaCompras As Object, abaVendas As Object
Dim ultLin As Long
Set abaEstoque = Sheets("Estoque")
Set abaCompras = Sheets("Compras")
Set abaVendas = Sheets("Vendas")
ultLin = abaEstoque.Range("A1000000").End(xlUp).Row
abaEstoque.Cells(2, 2).Value = WorksheetFunction.SumIf(abaCompras.Range("E:E"), abaEstoque.Cells(2, 1).Value, abaCompras.Range("F:F"))
abaEstoque.Cells(2, 3).Value = WorksheetFunction.SumIf(abaVendas.Range("E:E"), abaEstoque.Cells(2, 1).Value, abaVendas.Range("F:F"))
abaEstoque.Cells(2, 4).Value = abaEstoque.Cells(2, 2).Value - abaEstoque.Cells(2, 3).Value
ControleDaEmpresa.CxListagemEstoque.ColumnCount = 4
ControleDaEmpresa.CxListagemEstoque.ColumnHeads = True
ControleDaEmpresa.CxListagemEstoque.ColumnWidths = "125;125;125;125"
ControleDaEmpresa.CxListagemEstoque.RowSource = "Estoque!A2:D" & ultLin
End Sub
Explicação do código acima (atualizaCaixaDeListagemEstoque):
Até aqui construímos o código que representa a configuração da nossa caixa de listagem da página de Estoque do nosso formulário.
O que queremos aqui é chamar aquela função por uma ação, que vai chamar esse código de configuração cada vez o formulário ControleDaEmpresa for aberto.
Então iremos colocar essa função para disparar quando o nosso formulário ControleDaEmpresa for inicializado (UserForm Initialize).
Teremos uma sub privada, ou seja, que só vai funcionar dentro do código do nosso formulário, que irá chamar a sub atualizaCaixaDeListagemEstoque (criada acima), e assim mostrar as informações nas caixas de listagem (CxListagemEstoque), quando o nosso formulário for aberto.
Acessando o código do formulário
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.
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 ControleDaEmpresa > exibir código.
Colocaremos a linha destacada em negrito abaixo na Private Sub:
UserForm_Initialize:
Private Sub UserForm_Initialize()
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Call atualizaCaixaDeListagemEstoque
End Sub
Explicação do código acima:
Após esse código ser executado, o nosso formulário vai ter a seguinte cara (quando for iniciado) para a aba de Estoque:
Hoje em Controle para Empresas Aula11 nós vamos dar início ao cadastro da movimentação da aba de compras para poder registrar as compras!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima primeira aula da série, nessa aula vamos cadastrar as movimentações no VBA na aba de compras!
Para essa aula com formulário no VBA vamos utilizar um código que já criamos anteriormente, então facilita o trabalho!
No VBA isso é muito útil, pois as vezes queremos fazer a mesma ação ou algo parecido, então basta copiar o código e fazer alguns ajustes.
Hoje vamos utilizar a estrutura de repetição no VBA (estrutura de repetição for each), que é um pouco diferente do “for” sozinho, pois essa pega cada elemento de um todo.
Vamos utilizar também a estrutura condicional (estrutura if no VBA) que você já sabe como usar e o msgbox (caixa de mensagens) para mostrar uma mensagem ao usuário.
Tudo isso nós já vimos em aulas anteriores, mas agora vamos adaptar para as movimentações na aba de compras.
E aí, vamos pra aula aprender a modificar mais um código e continuar com a construção do nosso formulário?
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Como não temos nenhum módulo criado antes nessa planilha, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Colocaremos a seguinte function dentro dele, que será o objeto de estudo da aula de hoje:
Function checarCamposVazios() As Boolean
Dim forma As Object
For Each forma In ControleDaEmpresa.BlocoDeAbas.Pages(ControleDaEmpresa.BlocoDeAbas.Value).Controls
If TypeName(forma) = "TextBox" And forma.Value = "" Then
MsgBox ("Existem campos vazios. Favor preencher corretamente.")
checarCamposVazios = True
Exit Function
End If
Next
checarCamposVazios = False
End Function
Comentários a respeito da function checarCamposVazios():
O código acima vai ser utilizado por vários botões “Adicionar” do nosso formulário. Por isso criamos apenas um código dentro de um módulo específico e separado.
Vamos “chamar” esse mesmo código universal por todos os botões “Adicionar”. Independentemente da página e dos nomes das caixas de textos dela, ele irá interpretar as comparações e fará a limpeza das caixas necessárias.
Na aula de hoje, no caso, vamos fazer ela ser chamada apenas para a aba de Compras do formulário e continuaremos nas aulas seguintes.
OBS1: Para entender melhor a diferença entre Sub e Function: digamos que a sub é formada por um conjunto de rotinas que vai te gerar ações e não necessariamente uma resposta; e a function vai ser um conjunto de rotinas que vai te gerar um resultado/resposta, geralmente através de cálculos.
OBS2: Caso queira aprender mais sobre estrutura de repetição For Each, indicamos esse outro post aqui que te ensina com detalhes.
OBS3: Além disso, explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
Acessando o código do formulário
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 controle da empresa.
Formulário VBA
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub BtAdicionarCompras_Click()
If checarCamposVazios Then Exit Sub
End Sub
Explicação do código acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário. Quer aprender tudo sobre o VBA? Confira nosso curso do básico ao avançado em VBA.
Hoje em Controle para Empresas Aula12 nós vamos dar continuidade ao cadastro da movimentação da aba de compras.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima segunda aula (Controle para Empresas Aula12) da série, nessa aula nós vamos continuar com o processo para cadastrar as movimentações no VBA na aba de compras!
Como você já deve saber vamos utilizar macros VBA para esse procedimento e vamos utilizar os conhecimentos das aulas anteriores.
Então vamos ver a estrutura for each no VBA, vamos ver a estrutura if no VBA, como formatar bordas com VBA para que a tabela fique visualmente mais agradável.
Outra parte muito importante que muita gente acaba perguntando, mas que é sempre bom relembrar é como encontrar a primeira linha vazia no VBA ou a última linha preenchida no VBA.
Por fim nós vamos trazer dados do VBA para o Excel, então vamos pegar as informações que foram preenchidas dentro do formulário e atribuir esses valores para o Excel.
Assim vamos poder preencher a nossa aba de compras de forma automática através do formulário.
Mudança no módulo modChecarCamposVazios
Function checarCamposVazios() As Boolean
Dim forma As Object
For Each forma In ControleDaEmpresa.BlocoDeAbas.Pages(ControleDaEmpresa.BlocoDeAbas.Value).Controls
If TypeName(forma) = "TextBox" Then
If forma.Value = "" Then
MsgBox ("Existem campos vazios. Favor preencher corretamente.")
checarCamposVazios = True
Exit Function
End If
End If
Next
checarCamposVazios = False
End Function
Comentários a respeito da function checarCamposVazios():
O código acima vai ser utilizado por vários botões “Adicionar” do nosso formulário. Por isso criamos apenas um código dentro de um módulo específico e separado.
Vamos “chamar” esse mesmo código universal por todos os botões “Adicionar”. Independentemente da página e dos nomes das caixas de textos dela, ele irá interpretar as comparações e fará a limpeza das caixas necessárias.
Na aula de hoje, no caso, vamos fazer ela ser chamada apenas para a aba de Compras do formulário e continuaremos nas aulas seguintes.
OBS1: Para entender melhor a diferença entre Sub e Function: digamos que a sub é formada por um conjunto de rotinas que vai te gerar ações e não necessariamente uma resposta; e a function vai ser um conjunto de rotinas que vai te gerar um resultado/resposta, geralmente através de cálculos.
OBS2: Caso queira aprender mais sobre estrutura de repetição For Each, indicamos esse outro post aqui que te ensina com detalhes.
OBS3: Além disso, explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Option Explicit
Private Sub BtAdicionarCompras_Click()
Dim abaCompras As Object
Dim priLin As Long
If checarCamposVazios Then Exit Sub
Set abaCompras = Sheets("Compras")
priLin = abaCompras.Range("A1000000").End(xlUp).Row + 1
abaCompras.Cells(priLin, 1).Value = CLng(CxIDCompras.Value)
abaCompras.Cells(priLin, 2).Value = CDate(CxDataPCompras.Value)
abaCompras.Cells(priLin, 3).Value = CDate(CxDataCCompras.Value)
abaCompras.Cells(priLin, 4).Value = CxFornecedorCompras.Value
abaCompras.Cells(priLin, 5).Value = CxProdutoCompras.Value
abaCompras.Cells(priLin, 6).Value = CLng(CxQuantidadeCompras.Value)
abaCompras.Cells(priLin, 7).Value = CDbl(CxCustoTotalCompras.Value)
abaCompras.Range("A" & priLin & ":G" & priLin).Borders.LineStyle = xlContinuous
End Sub
Explicação do código acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nesse caso, optaríamos por entrar na aba Compras do formulário e daríamos duplo clique no botão “Adicionar” dela, para abrir o código.
Hoje em Controle para Empresas Aula13 nós vamos finalizar o cadastro da movimentação da aba de compras para prosseguir com a série!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima terceira aula da série, nessa aula nós vamos continuar com o processo para cadastrar as movimentações no VBA na aba de compras!
Aqui ainda vamos fazer o procedimento de cadastrar valores do formulário no Excel, que é uma parte muito importante.
Além de importar dados do formulário no Excel nós vamos limpar campos do formulário em VBA, vamos criar a macro para limpar os campos do formulário e atualizar a caixa de listagem no VBA.
Com isso nós vamos ter toda a parte automática para preencher os dados no formulário e exportar para o Excel essas informações.
Outra parte bem importante é a parte de produtos, onde vamos utilizar o worksheetfunction para utilizar uma função do Excel no VBA.
Nesse caso vamos usar a função CONT.SE no VBA (função CountIf) para poder contar a quantidade de um produto, assim saberemos se será necessário cadastrar esse produto ou não.
E não podemos esquecer de converter dados no VBA, pois temos data e valores no formato contábil. Dessa forma nossa tabela fica preenchida de forma correta com os formatos corretos também!
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Option Explicit
Private Sub BtAdicionarCompras_Click()
Dim abaCompras As Object, abaCaixa As Object, abaEstoque As Object
Dim priLin As Long, qtdProduto As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
Set abaCompras = Sheets("Compras")
Set abaCaixa = Sheets("Caixa")
Set abaEstoque = Sheets("Estoque")
'Cadastrando na aba Compras
priLin = abaCompras.Range("A1000000").End(xlUp).Row + 1
abaCompras.Cells(priLin, 1).Value = CLng(CxIDCompras.Value)
abaCompras.Cells(priLin, 2).Value = CDate(CxDataPCompras.Value)
abaCompras.Cells(priLin, 3).Value = CDate(CxDataCCompras.Value)
abaCompras.Cells(priLin, 4).Value = CxFornecedorCompras.Value
abaCompras.Cells(priLin, 5).Value = CxProdutoCompras.Value
abaCompras.Cells(priLin, 6).Value = CLng(CxQuantidadeCompras.Value)
abaCompras.Cells(priLin, 7).Value = CDbl(CxCustoTotalCompras.Value)
abaCompras.Range("A" & priLin & ":G" & priLin).Borders.LineStyle = xlContinuous
'Cadastrando na aba Caixa
priLin = abaCaixa.Range("A1000000").End(xlUp).Row + 1
abaCaixa.Cells(priLin, 1).Value = CLng(CxIDCompras.Value)
abaCaixa.Cells(priLin, 2).Value = CDate(CxDataPCompras.Value)
abaCaixa.Cells(priLin, 3).Value = CDate(CxDataCCompras.Value)
abaCaixa.Cells(priLin, 4).Value = CxProdutoCompras.Value
abaCaixa.Cells(priLin, 5).Value = "Compra"
abaCaixa.Cells(priLin, 6).Value = CxContaCompras.Value
abaCaixa.Cells(priLin, 7).Value = -CDbl(CxCustoTotalCompras.Value)
abaCaixa.Cells(priLin, 8).Value = CxStatusCompras.Value
abaCaixa.Range("A" & priLin & ":H" & priLin).Borders.LineStyle = xlContinuous
'Verificar se o produto existe na aba de Estoque
qtdProduto = WorksheetFunction.CountIf(abaEstoque.Range("A:A"), CxProdutoCompras.Value)
If qtdProduto = 0 Then
priLin = abaEstoque.Range("A1000000").End(xlUp).Row + 1
abaEstoque.Cells(priLin, 1).Value = CxProdutoCompras.Value
abaEstoque.Range("A" & priLin & ":D" & priLin).Borders.LineStyle = xlContinuous
End If
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemCompras
Set abaCompras = Nothing
Set abaCaixa = Nothing
Set abaEstoque = Nothing
End Sub
Explicação do código acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nesse caso, optaríamos por entrar na aba Compras do formulário e daríamos duplo clique no botão “Adicionar” dela, para abrir o código.
Hoje em Controle para Empresas Aula14 nós vamos fazer preenchimento automático do ID dentro do formulário com a verificação na planilha.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima quarta aula (Controle para Empresas Aula 14) da série, nessa aula nós vamos fazer o preenchimento automático de ID do formulário.
Vamos verificar campos vazios no formulário, para assim poder fazer um ajuste na caixa de ID para que ela possa ficar vazia sem mostrar a mensagem ao usuário.
Vamos utilizar a fórmula de texto InStr para verificar um texto específico dentro de outro para fazer essa verificação do ID.
Outra fórmula que vamos utilizar é o worksheetfunction para poder usar função do Excel no VBA (função MÁXIMO no VBA neste caso).
Para finalizar vamos utilizar a estrutura condicional no VBA (estrutura if no VBA) que você já deve saber muito bem e verificar informações duplicadas para checar o ID.
Ajuste num módulo específico
Vamos fazer um ajuste na função criada anteriormente no módulo “modChecarCamposVazios”:
Function checarCamposVazios() As Boolean
Dim forma As Object
For Each forma In ControleDaEmpresa.BlocoDeAbas.Pages(ControleDaEmpresa.BlocoDeAbas.Value).Controls
If TypeName(forma) = “TextBox” Then
If forma.Value = “” And InStr(forma.Name, “CxID”) = 0 Then
MsgBox (“Existem campos vazios. Favor preencher corretamente.”)
checarCamposVazios = True
Exit Function
End If
End If
Next
checarCamposVazios = False
End Function
Explicação da mudança:
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Para inserir um novo módulo, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Mudaremos a propriedade Name desse novo módulo (como mostrado no vídeo) para “modChecarIDDuplicado”
Colocaremos a seguinte Function dentro dele, que será o objeto de estudo da aula de hoje:
Function checarIDDuplicado(IDaVerificar As Long) As Boolean
Dim abaCaixa As Object
Dim qtdID As Long
Set abaCaixa = Sheets("Caixa")
qtdID = WorksheetFunction.CountIf(abaCaixa.Range("A:A"), IDaVerificar)
If qtdID > 0 Then
MsgBox ("Esse ID já aparece na planilha. Favor cadastrar outro")
checarIDDuplicado = True
Else
checarIDDuplicado = False
End If
End Function
Explicação do código acima:
O código acima vai ser utilizado por vários botões “Adicionar” do nosso formulário. Por isso criamos apenas um código dentro de um módulo específico e separado.
Vamos “chamar” esse mesmo código universal por todos os botões “Adicionar”, especificamente falando da abaCompras.
OBS: Explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS2: Para conferir mais detalhes sobre usar as funções do Excel no VBA (WorksheetFunction) você pode dar uma olhada nesse outro post em que abordamos justamente isso.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub BtAdicionarCompras_Click()
Dim abaCompras As Object, abaCaixa As Object, abaEstoque As Object
Dim priLin As Long, qtdProduto As Long, IDMovimentacao As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Validando o ID da Movimentação
If CxIDCompras.Value <> "" Then
If checarIDDuplicado(CxIDCompras.Value) Then Exit Sub
End If
Set abaCompras = Sheets("Compras")
Set abaCaixa = Sheets("Caixa")
Set abaEstoque = Sheets("Estoque")
'Cadastrando na aba Compras
priLin = abaCompras.Range("A1000000").End(xlUp).Row + 1
IDMovimentacao = WorksheetFunction.Max(abaCaixa.Range("A:A")) + 1
abaCompras.Cells(priLin, 1).Value = IDMovimentacao
abaCompras.Cells(priLin, 2).Value = CDate(CxDataPCompras.Value)
abaCompras.Cells(priLin, 3).Value = CDate(CxDataCCompras.Value)
abaCompras.Cells(priLin, 4).Value = CxFornecedorCompras.Value
abaCompras.Cells(priLin, 5).Value = CxProdutoCompras.Value
abaCompras.Cells(priLin, 6).Value = CLng(CxQuantidadeCompras.Value)
abaCompras.Cells(priLin, 7).Value = CDbl(CxCustoTotalCompras.Value)
abaCompras.Range("A" & priLin & ":G" & priLin).Borders.LineStyle = xlContinuous
'Cadastrando na aba Caixa
priLin = abaCaixa.Range("A1000000").End(xlUp).Row + 1
abaCaixa.Cells(priLin, 1).Value = IDMovimentacao
abaCaixa.Cells(priLin, 2).Value = CDate(CxDataPCompras.Value)
abaCaixa.Cells(priLin, 3).Value = CDate(CxDataCCompras.Value)
abaCaixa.Cells(priLin, 4).Value = CxProdutoCompras.Value
abaCaixa.Cells(priLin, 5).Value = "Compra"
abaCaixa.Cells(priLin, 6).Value = CxContaCompras.Value
abaCaixa.Cells(priLin, 7).Value = -CDbl(CxCustoTotalCompras.Value)
abaCaixa.Cells(priLin, 8).Value = CxStatusCompras.Value
abaCaixa.Range("A" & priLin & ":H" & priLin).Borders.LineStyle = xlContinuous
'Verificar se o produto existe na aba de Estoque
qtdProduto = WorksheetFunction.CountIf(abaEstoque.Range("A:A"), CxProdutoCompras.Value)
If qtdProduto = 0 Then
priLin = abaEstoque.Range("A1000000").End(xlUp).Row + 1
abaEstoque.Cells(priLin, 1).Value = CxProdutoCompras.Value
abaEstoque.Range("A" & priLin & ":D" & priLin).Borders.LineStyle = xlContinuous
End If
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemCompras
Set abaCompras = Nothing
Set abaCaixa = Nothing
Set abaEstoque = Nothing
End Sub
Explicação do código acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nesse caso, optaríamos por entrar na aba Compras do formulário e daríamos duplo clique no botão “Adicionar” dela, para abrir o código.
Então, o que você aprendeu nessa (Controle para Empresas Aula14) aula foi, resumidamente:
Hoje em Controle para Empresas Aula15 eu quero te mostrar como fazer o cálculo do estoque de forma automática com o VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima quinta aula (Controle para Empresas Aula15) da série, nessa aula nós vamos te mostrar como fazer cálculo automático no VBA para o estoque!
Vamos atualizar a caixa de listagem na parte de estoque para todos os produtos! Para isso vamos utilizar a estrutura de repetição for no VBA e claro a estrutura condicional if no VBA.
Além disso nós vamos utilizar os eventos no VBA, que são gatilhos para executar uma macro sempre que um desses eventos acontecer.
Neste caso nós vamos utilizar o evento change no VBA, que é sempre que acontecer uma mudança, nesse caso, uma mudança de aba.
Então sempre que alterarmos uma das abas esse código será executado para poder atualizar nosso estoque de forma automática.
Ajuste num módulo específico
Para acessar um módulo já criado, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Vamos localizar o módulo “modAtualizarCaixaListagem”, daremos duplo clique nele para fazer ajustes na sub abaixo, criada na aula 10 da nossa série:
Sub atualizaCaixaDeListagemEstoque()
Dim abaEstoque As Object, abaCompras As Object, abaVendas As Object
Dim ultLin As Long, linha As Long
Set abaEstoque = Sheets("Estoque")
Set abaCompras = Sheets("Compras")
Set abaVendas = Sheets("Vendas")
ultLin = abaEstoque.Range("A1000000").End(xlUp).Row
If ultLin > 1 Then
For linha = 2 To ultLin
abaEstoque.Cells(linha, 2).Value = WorksheetFunction.SumIf(abaCompras.Range("E:E"), abaEstoque.Cells(linha, 1).Value, abaCompras.Range("F:F"))
abaEstoque.Cells(linha, 3).Value = WorksheetFunction.SumIf(abaVendas.Range("E:E"), abaEstoque.Cells(linha, 1).Value, abaVendas.Range("F:F"))
abaEstoque.Cells(linha, 4).Value = abaEstoque.Cells(linha, 2).Value - abaEstoque.Cells(linha, 3).Value
Next
End If
ControleDaEmpresa.CxListagemEstoque.ColumnCount = 4
ControleDaEmpresa.CxListagemEstoque.ColumnHeads = True
ControleDaEmpresa.CxListagemEstoque.ColumnWidths = "125;125;125;125"
ControleDaEmpresa.CxListagemEstoque.RowSource = "Estoque!A2:D" & ultLin
End Sub
Explicação do código acima (atualizaCaixaDeListagemEstoque):
Agora, precisamos dentro do código do formulário falar que: quando acessarmos a aba de Estoque, queremos que ela seja/esteja atualizada. Porque se adicionarmos algum produto, por exemplo, a mudança não estaria refletida.
Então iremos chamar essa sub para disparar quando o nosso formulário ControleDaEmpresa estiver exatamente na abaEstoque.
Acessando o código do formulário
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.
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 ControleDaEmpresa > exibir código.
Colocaremos a seguinte private sub no interior do código do formulário:
Private Sub BlocoDeAbas_Change()
If BlocoDeAbas.Value = 3 Then Call atualizaCaixaDeListagemEstoque
End Sub
Explicação:
Para fechar a aula de hoje vamos incluir um ajuste na sub privada (dentro do formulário) para ele ser aberto sempre na primeira aba.
Private Sub UserForm_Initialize()
BlocoDeAbas.Value = 0
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Call atualizaCaixaDeListagemEstoque
End Sub
Explicação:
Nessa aula (Controle para Empresas Aula15) você resumidamente lidou com:
Hoje em Controle para Empresas Aula16 vamos cadastrar as movimentações na aba vendas para automatizar esse preenchimento com o VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima sexta (Controle para Empresas Aula16) aula da série, nessa aula vamos te mostrar como cadastrar as movimentações na aba de vendas!
Como boa parte do que vamos fazer nós já temos de macros anteriores isso fica muito mais fácil, pois agora só vamos precisar copiar e fazer alguns pequenos ajustes na macro.
Temos a validação de campos no VBA, validação de ID duplicado, limpar campos no formulário, atualizar caixa de listagem, estrutura condicional if.
Vamos utilizar o SOMASE no VBA com o worksheetfunction.sumif para verificar o total do estoque para validar se podemos ou não efetuar uma venda.
E para essa comparação vamos utilizar o CLng no VBA (converter para long no VBA) para garantir que a comparação será feita entre 2 números e não entre um número e um texto.
Caso não seja possível efetuar uma venda vamos utilizar a caixa de mensagens no VBA (Msgbox) para informar isso ao usuário.
E por fim nós vamos cadastrar informações do VBA no Excel. Lembrando que praticamente todas as macros já existem, só vamos fazer os ajustes para cada aba!
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo o código abaixo dentro dos códigos já existentes no formulário
Private Sub BtAdicionarVendas_Click()
Dim abaVendas As Object, abaCaixa As Object, abaEstoque As Object
Dim priLin As Long, qtdProduto As Long, IDMovimentacao As Long, estoqueProduto As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Validando o ID da Movimentação
If CxIDVendas.Value <> "" Then
If checarIDDuplicado(CxIDVendas.Value) Then Exit Sub
End If
Set abaVendas = Sheets("Vendas")
Set abaCaixa = Sheets("Caixa")
Set abaEstoque = Sheets("Estoque")
'Validar se a quantidade a ser vendida está disponível em Estoque
estoqueProduto = WorksheetFunction.SumIf(abaEstoque.Range("A:A"), CxProdutoVendas.Value, abaEstoque.Range("D:D"))
If estoqueProduto < CLng(CxQuantidadeVendas.Value) Then
MsgBox ("O estoque do produto em questão não é suficiente para realizar essa venda.")
Exit Sub
End If
'Cadastrando na aba Vendas
priLin = abaVendas.Range("A1000000").End(xlUp).Row + 1
IDMovimentacao = WorksheetFunction.Max(abaCaixa.Range("A:A")) + 1
abaVendas.Cells(priLin, 1).Value = IDMovimentacao
abaVendas.Cells(priLin, 2).Value = CDate(CxDataPVendas.Value)
abaVendas.Cells(priLin, 3).Value = CDate(CxDataCVendas.Value)
abaVendas.Cells(priLin, 4).Value = CxClienteVendas.Value
abaVendas.Cells(priLin, 5).Value = CxProdutoVendas.Value
abaVendas.Cells(priLin, 6).Value = CLng(CxQuantidadeVendas.Value)
abaVendas.Cells(priLin, 7).Value = CDbl(CxValorVendaVendas.Value)
abaVendas.Cells(priLin, 8).Value = CDbl(CxCustoUVendas.Value)
abaVendas.Cells(priLin, 9).Value = CDbl(CxCustoVVendas.Value)
abaVendas.Range("A" & priLin & ":I" & priLin).Borders.LineStyle = xlContinuous
'Cadastrando na aba Caixa
priLin = abaCaixa.Range("A1000000").End(xlUp).Row + 1
abaCaixa.Cells(priLin, 1).Value = IDMovimentacao
abaCaixa.Cells(priLin, 2).Value = CDate(CxDataPVendas.Value)
abaCaixa.Cells(priLin, 3).Value = CDate(CxDataCVendas.Value)
abaCaixa.Cells(priLin, 4).Value = CxProdutoVendas.Value
abaCaixa.Cells(priLin, 5).Value = "Venda"
abaCaixa.Cells(priLin, 6).Value = CxContaVendas.Value
abaCaixa.Cells(priLin, 7).Value = CDbl(CxValorVendaVendas.Value)
abaCaixa.Cells(priLin, 8).Value = CxStatusVendas.Value
abaCaixa.Range("A" & priLin & ":H" & priLin).Borders.LineStyle = xlContinuous
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Set abaVendas = Nothing
Set abaCaixa = Nothing
Set abaEstoque = Nothing
End Sub
Explicação do código acima (BtAdicionarVendas_Click):
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nesse caso, optaríamos por entrar na aba Vendas do formulário e daríamos duplo clique no botão “Adicionar” dela, para abrir o código.
OBS2: Explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS3: Para conferir mais detalhes sobre usar as funções do Excel no VBA (WorksheetFunction) você pode dar uma olhada nesse outro post em que abordamos justamente isso.
OBS4: Para conferir detalhes sobre as funções de conversão de tipo, dê uma olhada nesse link aqui!
Nessa aula (Controle para Empresas Aula16) você resumidamente lidou com:
Hoje em Controle para Empresas Aula17 vamos dar início ao cálculo de custo unitário médio da venda no Excel para depois passar ao VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima sétima aula da série, nessa aula vamos te mostrar como calcular custo unitário de uma venda!
Vamos fazer o cálculo de custo unitário no Excel para que fique mais fácil de entender, então fique ligado no passo a passo, e veja também como utilizar a função SOMASES no Excel para fazer alguns cálculos.
Dessa forma vai ficar mais fácil para que você entenda a parte de custo médio no Excel e facilite na hora de criar o código em VBA.
Essa é uma boa prática quando você ainda não tem muita experiência ou de fato precisa aprender como vai construir a lógica dentro do VBA.
Então é importante que faça o cálculo de custo unitário no Excel (ou qualquer outra operação que precise fazer) e depois tendo todos os passos você consegue passar para o VBA de uma forma muito mais fácil e rápida.
Até porque fazendo os cálculos dentro do Excel você vai conseguir confirmar se o seu código em VBA está funcionando corretamente e está retornando exatamente o que precisa!
Agora vamos a aula que ela tem muitos detalhes importantes para que você entenda o cálculo de custo da venda no Excel!
Aba Compras
– Custo de Compra
É o que vai nos dar o custo de compra daquelas unidades em questão, até a data analisada.
Para retornar o custo de compra vamos utilizar de uma função SOMASES no Excel.
Nela vamos somar na coluna G da aba Compras o que na coluna E da aba Compras for equivalente ao produto que está na célula C7 da aba Vendas (exemplo: Produto2), e que na coluna C da aba compras corresponda a uma data menor ou igual à existente na célula C5 da aba Vendas (exemplo: 20/11/2021).
Segue a fórmula usada:
=SOMASES(Compras!G:G;Compras!E:E;Vendas!C7;Compras!C:C;"<="&Vendas!C5)
Resultado: R$ 21.748,30
OBS: Repare que foram somados os custos totais das linhas 3 e 5 da aba de Compras.
– Quantidade Comprada
É o que vai nos dar a quantidade comprada daquele produto em questão, até a data analisada.
Para retornar a quantidade comprada vamos utilizar também de uma função SOMASES no Excel.
Nela vamos somar na coluna F da aba Compras o que na coluna E da aba Compras for equivalente ao produto que está na célula C7 da aba Vendas (exemplo: Produto2), e que na coluna C da aba compras corresponda a uma data menor ou igual à existente na célula C5 da aba Vendas (exemplo: 20/11/2021).
Segue a fórmula usada:
=SOMASES(Compras!F:F;Compras!E:E;Vendas!C7;Compras!C:C;"<="&Vendas!C5)
Resultado: 1400
OBS: Repare que foram somadas as quantidades das linhas 3 e 5 da aba de Compras.
Aba Vendas
– Custo de Venda
É o que vai nos dar o custo de venda daquelas unidades em questão, até a data analisada.
Para retornar o custo de venda vamos utilizar de uma função SOMASES no Excel.
Nela vamos somar na coluna I da aba Vendas (custo da venda) o que na coluna E (produtos) da aba Vendas for equivalente ao produto que está na célula C7 da aba Vendas (exemplo: Produto2), e que na coluna C (data de competência) da aba Vendas corresponda a uma data menor ou igual à existente na célula C5 da aba Vendas (exemplo: 20/11/2021), além de levar em consideração que na coluna A (de IDs) da aba Vendas vão ser analisados os IDs diferentes do ID em questão (exemplo: 8).
Segue a fórmula usada:
=SOMASES(I:I;E:E;C7;C:C;"<="&C5;A:A;"<>"&A5)
Resultado: R$ 14.451,79
OBS: Repare que foram somadas as quantidades das linhas 3 e 4 da aba de Vendas, desconsiderando a linha 5 porque ela é o mesmo do ID em questão (exemplo: 8).
– Quantidade Vendida
É o que vai nos dar a quantidade vendida daquelas unidades em questão, até a data analisada.
Para retornar a quantidade vendida vamos utilizar também de uma função SOMASES no Excel.
Nela vamos somar na coluna F da aba Vendas (quantidade) o que na coluna E (produtos) da aba Vendas for equivalente ao produto que está na célula C7 da aba Vendas (exemplo: Produto2), e que na coluna C (data de competência) da aba Vendas corresponda a uma data menor ou igual à existente na célula C5 da aba Vendas (exemplo: 20/11/2021), além de levar em consideração que na coluna A (de IDs) da aba Vendas vão ser analisados os IDs diferentes do ID em questão (exemplo: 8).
Segue a fórmula usada:
=SOMASES(F:F;E:E;C7;C:C;"<="&C5;A:A;"<>"&A5)
Resultado: 900
OBS: Repare que foram somadas as quantidades das linhas 3 e 4 da aba de Vendas, desconsiderando a linha 5 porque ela é o mesmo do ID em questão (exemplo: 8).
Custo Unitário
Vamos utilizar da seguinte expressão matemática para definir o custo unitário:
= (Custo de Compra – Custo de Venda) / (Quantidade Comprada – Quantidade Vendida)
=(D8-D10)/(D9-D11)
= (R$ 21.748,30 - R$ 14.451,79) / (1400 - 900)
= R$ 7.296,51 / 500
= R$ 14,5930200
= R$ 14,59
Tabela resumo dos exemplos usados em aula:
Tabela com fórmulas expostas:
Nessa aula (Controle para Empresas Aula17) você aprendeu a calcular custo unitário de uma venda, a calcular custo unitário de uma venda, a usar a função SOMASES no Excel.
Hoje em Controle para Empresas Aula18 vamos começar a automatizar o cálculo de custo unitário médio da venda com o VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima oitava aula da série, nessa aula vamos dar continuidade ao cálculo de custo unitário no Excel!
Já vimos como fazer o custo unitário médio no Excel na aula passada, mas hoje nós vamos dar início ao custo unitário médio no VBA.
Vamos começar a construir a macro no VBA para fazer esse cálculo. Para isso vamos utilizar o SOMASES no VBA, que seria o SumIfs no VBA.
Lembrando que para utilizar uma função do Excel dentro do VBA é necessário utilizar o worksheetfunction.
Isso pode facilitar em alguns cálculos para que você não tenha que escrever uma função para fazer algo que já existe dentro do Excel.
Agora vamos a aula para iniciar o nosso cálculo de custo unitário médio!
Os passos da aula de hoje:
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Como não temos nenhum módulo criado antes nessa planilha, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Alteraremos a propriedade “name” do módulo para “modCalcularCustoVenda”.
Em seguida colocaremos a seguinte sub (código) dentro desse módulo, que será o objeto de estudo da aula de hoje:
Option Explicit
Sub calcularCustoVenda()
Dim abaVendas As Object, abaCompras As Object
Dim custoCompra As Double, custoVenda As Double, custoUnitario As Double, custoTotalVenda As Double
Dim qtdCompra As Long, qtdVenda As Long
Set abaCompras = Sheets("Compras")
Set abaVendas = Sheets("Vendas")
'custoCompra = WorksheetFunction.SumIfs(abaCompras.Range("G:G"), abaCompras.Range("E:E"), ControleDaEmpresa.CxProdutoVendas.Value, abaCompras.Range("C:C"), "<=" & ControleDaEmpresa.CxDataCVendas.Value)
custoCompra = WorksheetFunction.SumIfs(abaCompras.Range("G:G"), abaCompras.Range("E:E"), "Produto2", abaCompras.Range("C:C"), "<=" & CLng(CDate("20/11/2021")))
qtdCompra = WorksheetFunction.SumIfs(abaCompras.Range("F:F"), abaCompras.Range("E:E"), "Produto2", abaCompras.Range("C:C"), "<=" & CLng(CDate("20/11/2021")))
custoVenda = WorksheetFunction.SumIfs(abaVendas.Range("I:I"), abaVendas.Range("E:E"), "Produto2", abaVendas.Range("C:C"), "<=" & CLng(CDate("20/11/2021")), abaVendas.Range("A:A"), "<>" & 8)
qtdVenda = WorksheetFunction.SumIfs(abaVendas.Range("F:F"), abaVendas.Range("E:E"), "Produto2", abaVendas.Range("C:C"), "<=" & CLng(CDate("20/11/2021")), abaVendas.Range("A:A"), "<>" & 8)
custoUnitario = (custoCompra - custoVenda) / (qtdCompra - qtdVenda)
custoTotalVenda = Round(custoUnitario * 300, 2)
End Sub
Explicação do código acima “calcularCustoVenda”:
O código acima vai ser utilizado para auxiliar o código de cadastro de produtos no nosso formulário.
Vamos “chamar” esse mesmo código universal para todas as páginas/abas do nosso formulário. Independentemente da página e dos nomes das caixas de textos dela, ele irá interpretar as ações necessárias e calcular.
Hoje começamos a ver como é o cálculo para o exemplo dado na aula passada, de forma didática, traduzindo o que tínhamos estruturado por fórmulas do Excel dentro do VBA. Na próxima aula vamos tornar ele automático, para funcionar para qualquer caso e interagindo com as informações do formulário.
OBS1: Caso queira aprender mais sobre o método WorksheetFunction, e sobre a função SOMASES no VBA, indicamos esse outro post aqui que te ensina com detalhes.
OBS2: Além disso, explicamos a diferença entre Dim e Set em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS3: Para entender melhor sobre funções de conversão de tipo (CLng e CDate usados no código), visite esse link aqui.
Nessa aula (Controle para Empresas Aula18) você lidou com:
Hoje em Controle para Empresas Aula19 vamos dar continuidade a automação do cálculo de custo unitário médio da venda com VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a décima nona aula (Controle para Empresas Aula19) da série, nessa aula vamos dar continuidade ao cálculo de custo unitário no Excel só que dentro do formulário.
Fizemos na aula 17 o cálculo do custo unitário e na aula 18 nós fizemos o custo unitário médio no VBA.
O objetivo dessa aula é utilizar o código que já temos, onde temos o SOMASES no VBA (SumIfs no VBA), utilizando o worksheetfunction (permite a utilização de funções do Excel no VBA).
Só teremos que fazer alguns ajustes para que as macros funcionem corretamente quando preenchermos alguns campos, e é claro que temos que fazer a verificação desses campos para que os cálculos sejam feitos corretamente!
Assim teremos o nosso cálculo de custo unitário e custo unitário da venda sendo preenchidos de forma automática dentro do formulário.
Ajuste num módulo específico
Para acessar um módulo já criado, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Vamos localizar o módulo “modCalcularCustoVenda”, daremos duplo clique nele para fazer ajustes na sub abaixo, criada na aula passada da nossa série:
Option Explicit
Sub calcularCustoVenda()
Dim abaVendas As Object, abaCompras As Object
Dim custoCompra As Double, custoVenda As Double, custoUnitario As Double, custoTotalVenda As Double
Dim qtdCompra As Long, qtdVenda As Long
If ControleDaEmpresa.CxProdutoVendas.Value = "" Or ControleDaEmpresa.CxQuantidadeVendas.Value = "" Or ControleDaEmpresa.CxDataCVendas.Value = "" Then
Exit Sub
End If
Set abaCompras = Sheets("Compras")
Set abaVendas = Sheets("Vendas")
custoCompra = WorksheetFunction.SumIfs(abaCompras.Range("G:G"), abaCompras.Range("E:E"), ControleDaEmpresa.CxProdutoVendas.Value, abaCompras.Range("C:C"), "<=" & CLng(CDate(ControleDaEmpresa.CxDataCVendas.Value)))
qtdCompra = WorksheetFunction.SumIfs(abaCompras.Range("F:F"), abaCompras.Range("E:E"), ControleDaEmpresa.CxProdutoVendas.Value, abaCompras.Range("C:C"), "<=" & CLng(CDate(ControleDaEmpresa.CxDataCVendas.Value)))
custoVenda = WorksheetFunction.SumIfs(abaVendas.Range("I:I"), abaVendas.Range("E:E"), ControleDaEmpresa.CxProdutoVendas.Value, abaVendas.Range("C:C"), "<=" & CLng(CDate(ControleDaEmpresa.CxDataCVendas.Value)))
qtdVenda = WorksheetFunction.SumIfs(abaVendas.Range("F:F"), abaVendas.Range("E:E"), ControleDaEmpresa.CxProdutoVendas.Value, abaVendas.Range("C:C"), "<=" & CLng(CDate(ControleDaEmpresa.CxDataCVendas.Value)))
custoUnitario = (custoCompra - custoVenda) / (qtdCompra - qtdVenda)
custoTotalVenda = Round(custoUnitario * ControleDaEmpresa.CxQuantidadeVendas.Value, 2)
ControleDaEmpresa.CxCustoUVendas.Value = Format(custoUnitario, "0.00")
ControleDaEmpresa.CxCustoVVendas.Value = Format(custoTotalVenda, "#,##0.00")
End Sub
Explicação do código acima “calcularCustoVenda”:
O código acima vai ser utilizado para auxiliar o código de cadastro de produtos no nosso formulário.
Vamos “chamar” esse mesmo código universal para todas as páginas/abas do nosso formulário. Independentemente da página e dos nomes das caixas de textos dela, ele irá interpretar as ações necessárias e calcular.
Nessa aula tornamos essa sub para interpretar o cálculo de preço unitário automático, para funcionar para qualquer caso, e interagir com as informações do formulário.
OBS1: Caso queira aprender mais sobre o método WorksheetFunction, e sobre a função SOMASES no VBA, indicamos esse outro post aqui que te ensina com detalhes.
OBS2: Além disso, explicamos a diferença entre Dim e Set em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS3: Para entender melhor sobre funções de conversão de tipo (CLng e CDate usados no código), visite esse link aqui.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub CxDataCVendas_Change()
Call calcularCustoVenda
End Sub
Private Sub CxProdutoVendas_Change()
Call calcularCustoVenda
End Sub
Private Sub CxQuantidadeVendas_Change()
Call calcularCustoVenda
End Sub
Explicação do código acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nessa aula (Controle para Empresas Aula19) você lidou com os conceitos:
Hoje em Controle para Empresas Aula20 vamos fazer o cadastro das movimentações na aba de caixa para continuar nossa automação!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima aula (Controle para Empresas Aula20) da nossa Série de Controle para Empresas. Nessa aula nós vamos cadastrar as movimentações na aba de caixa.
Essa construção é mais fácil, pois boa parte do que nós vamos utilizar já fizemos nas aulas anteriores.
Então já temos o formulário no VBA construído, mas vamos seguir alguns passos para cadastrar essas movimentações.
Vamos validar campos do Excel com VBA, validar ID duplicado, cadastrar informações na aba caixa, limpar campos do formulário com VBA e atualizar caixa de listagem.
Como boa parte desses procedimentos nós já fizemos, isso fica muito mais fácil, pois podemos copiar o código anterior e adaptar para essa nova atividade.
Então isso facilita muito o processo de criação e aumenta a sua produtividade!
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo o código abaixo dentro dos códigos já existentes no formulário
Private Sub BtAdicionarCaixa_Click()
Dim abaCaixa As Object
Dim priLin As Long, IDMovimentacao As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Validando o ID da Movimentação
If CxIDCaixa.Value <> "" Then
If checarIDDuplicado(CxIDCaixa.Value) Then Exit Sub
End If
Set abaCaixa = Sheets("Caixa")
'Cadastrando na aba Caixa
priLin = abaCaixa.Range("A1000000").End(xlUp).Row + 1
IDMovimentacao = WorksheetFunction.Max(abaCaixa.Range("A:A")) + 1
abaCaixa.Cells(priLin, 1).Value = IDMovimentacao
abaCaixa.Cells(priLin, 2).Value = CDate(CxDataPCaixa.Value)
abaCaixa.Cells(priLin, 3).Value = CDate(CxDataCCaixa.Value)
abaCaixa.Cells(priLin, 4).Value = CxDescricaoCaixa.Value
abaCaixa.Cells(priLin, 5).Value = CxTipoCaixa.Value
abaCaixa.Cells(priLin, 6).Value = CxContaCaixa.Value
abaCaixa.Cells(priLin, 7).Value = CDbl(CxValorCaixa.Value)
abaCaixa.Cells(priLin, 8).Value = CxStatusCaixa.Value
abaCaixa.Range("A" & priLin & ":H" & priLin).Borders.LineStyle = xlContinuous
abaCaixa.Range("A:H").Columns.AutoFit
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemCaixa
Set abaCaixa = Nothing
End Sub
Explicação do código acima (BtAdicionarCaixa_Click):
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nesse caso, optaríamos por entrar na aba Caixa do formulário e daríamos duplo clique no botão “Adicionar” dela, para abrir o código.
OBS: Explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS2: Para conferir mais detalhes sobre usar as funções do Excel no VBA (WorksheetFunction) você pode dar uma olhada nesse outro post em que abordamos justamente isso.
OBS3: Para conferir detalhes sobre as funções de conversão de tipo, dê uma olhada nesse link aqui.
Nessa aula (Controle para Empresas Aula20) você resumidamente lidou com:
Hoje em Controle para Empresas Aula21 vamos fazer o processo reverso da última aula que é excluir as movimentações!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima primeira aula (Controle para Empresas Aula21) da série, nessa aula vamos aprender como excluir dados com VBA.
Vamos criar a nossa macro dentro da caixa de listagem do VBA para que primeiramente possamos carregar campos do formulário com as informações selecionadas.
E em seguida vamos poder utilizar a macro de excluir para excluir dados de forma automática no VBA.
Então vamos selecionar as informações, elas serão atualizadas dentro do formulário e com isso vamos poder excluir esses dados.
Lembrando que vamos excluir essas informações de todas as abas, não só do formulário.
Esse é um recurso muito interessante, pois normalmente só aprendemos a parte de adicionar informações, mas muita das vezes precisamos excluir ou editar essas informações.
Agora vamos aprender como excluir dados do Excel com VBA de forma automática!
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Como não temos nenhum módulo criado antes nessa planilha, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Mudaremos a sua propriedade name para “modExcluirID” e colocaremos a seguinte sub dentro dele, que será um objeto de estudo da aula de hoje:
Option Explicit
Sub excluirID(IDaExcluir As Long)
Dim abaCompras As Object, abaVendas As Object, abaCaixa As Object
Dim ultLin As Long, i As Long
Set abaCaixa = Sheets("Caixa")
Set abaCompras = Sheets("Compras")
Set abaVendas = Sheets("Vendas")
'Excluindo o ID da aba Compras
ultLin = abaCompras.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If abaCompras.Cells(i, 1).Value = IDaExcluir Then
abaCompras.Range(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
Next
'Excluindo o ID da aba Vendas
ultLin = abaVendas.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If abaVendas.Cells(i, 1).Value = IDaExcluir Then
abaVendas.Range(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
Next
'Excluindo o ID da aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If abaCaixa.Cells(i, 1).Value = IDaExcluir Then
abaCaixa.Range(i & ":" & i).Delete shift:=xlUp
i = i - 1
End If
Next
End Sub
Comentários a respeito da sub excluirID(IDaExcluir As Long):
O código acima vai ser utilizado por vários botões “Excluir” do nosso formulário. Por isso criamos apenas um código dentro de um módulo específico e separado.
Vamos “chamar” esse mesmo código universal por todos os botões “Excluir”. Independentemente da página e dos nomes das caixas de textos dela, ele irá interpretar as comparações e fará a limpeza das caixas necessárias.
OBS: Caso queira aprender mais sobre estrutura de repetição For, indicamos esse outro post aqui que te ensina com detalhes.
OBS2: Além disso, explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub BtExcluirCaixa_Click()
If CxIDCaixa.Value = "" Then
MsgBox "O ID a ser excluído não está preenchido. Dê um duplo clique na movimentação a ser excluída."
Exit Sub
End If
excluirID (CxIDCaixa.Value)
Call limparCamposDoFormulario
Call atualizaCaixaDeListagemCaixa
End Sub
Explicação do código acima:
Private Sub BtExcluirCompras_Click()
If CxIDCompras.Value = "" Then
MsgBox "O ID a ser excluído não está preenchido. Dê um duplo clique na movimentação a ser excluída."
Exit Sub
End If
excluirID (CxIDCompras.Value)
Call limparCamposDoFormulario
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemCaixa
End Sub
Explicação do código acima:
Private Sub BtExcluirVendas_Click()
If CxIDVendas.Value = "" Then
MsgBox "O ID a ser excluído não está preenchido. Dê um duplo clique na movimentação a ser excluída."
Exit Sub
End If
excluirID (CxIDVendas.Value)
Call limparCamposDoFormulario
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
End Sub
Explicação do código acima:
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Além desses ajustes citados acima, faremos outro tipo de modificação na aula de hoje, dentro do código do formulário também.
Dessa vez, vamos atuar com o evento de duplo clique na caixa de listagem das abas Caixa, Vendas e Compras para carregar as informações da linha selecionada para as caixas individuais de cada aba. Observe:
Private Sub CxListagemCaixa_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
CxIDCaixa.Value = CxListagemCaixa.List(CxListagemCaixa.ListIndex, 0)
CxDataPCaixa.Value = Format(CxListagemCaixa.List(CxListagemCaixa.ListIndex, 1), "dd/mm/yyyy")
CxDataCCaixa.Value = Format(CxListagemCaixa.List(CxListagemCaixa.ListIndex, 2), "dd/mm/yyyy")
CxDescricaoCaixa.Value = CxListagemCaixa.List(CxListagemCaixa.ListIndex, 3)
CxTipoCaixa.Value = CxListagemCaixa.List(CxListagemCaixa.ListIndex, 4)
CxContaCaixa.Value = CxListagemCaixa.List(CxListagemCaixa.ListIndex, 5)
CxValorCaixa.Value = Format(CxListagemCaixa.List(CxListagemCaixa.ListIndex, 6), "#,##0.00")
CxStatusCaixa.Value = CxListagemCaixa.List(CxListagemCaixa.ListIndex, 7)
End Sub
Explicação do código acima:
Private Sub CxListagemCompras_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
CxIDCompras.Value = CxListagemCompras.List(CxListagemCompras.ListIndex, 0)
CxDataPCompras.Value = Format(CxListagemCompras.List(CxListagemCompras.ListIndex, 1), "dd/mm/yyyy")
CxDataCCompras.Value = Format(CxListagemCompras.List(CxListagemCompras.ListIndex, 2), "dd/mm/yyyy")
CxFornecedorCompras.Value = CxListagemCompras.List(CxListagemCompras.ListIndex, 3)
CxProdutoCompras.Value = CxListagemCompras.List(CxListagemCompras.ListIndex, 4)
CxQuantidadeCompras.Value = CxListagemCompras.List(CxListagemCompras.ListIndex, 5)
CxCustoTotalCompras.Value = Format(CxListagemCompras.List(CxListagemCompras.ListIndex, 6), "#,##0.00")
End Sub
Explicação do código acima:
Private Sub CxListagemVendas_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
CxIDVendas.Value = CxListagemVendas.List(CxListagemVendas.ListIndex, 0)
CxDataPVendas.Value = Format(CxListagemVendas.List(CxListagemVendas.ListIndex, 1), "dd/mm/yyyy")
CxDataCVendas.Value = Format(CxListagemVendas.List(CxListagemVendas.ListIndex, 2), "dd/mm/yyyy")
CxClienteVendas.Value = CxListagemVendas.List(CxListagemVendas.ListIndex, 3)
CxProdutoVendas.Value = CxListagemVendas.List(CxListagemVendas.ListIndex, 4)
CxQuantidadeVendas.Value = CxListagemVendas.List(CxListagemVendas.ListIndex, 5)
CxValorVendaVendas.Value = Format(CxListagemVendas.List(CxListagemVendas.ListIndex, 6), "#,##0.00")
CxCustoUVendas.Value = Format(CxListagemVendas.List(CxListagemVendas.ListIndex, 7), "#,##0.00")
CxCustoVVendas.Value = Format(CxListagemVendas.List(CxListagemVendas.ListIndex, 8), "#,##0.00")
End Sub
Explicação do código acima:
Nessa aula (Controle para Empresas Aula21) se destacaram os seguintes tópicos:
Hoje em Controle para Empresas Aula22 vamos fazer as alterações das movimentações nas abas vendas, compras e caixa.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima segunda aula (Controle para Empresas Aula22) da série, nessa aula vamos aprender como alterar dados com VBA dentro do formulário.
Nessa aula nós vamos criar a macro para alterar as movimentações na aba vendas e para isso vamos checar campos em branco no formulário.
Vamos limpar campos do formulário, atualizar caixa de listagem, usar a função IF no VBA, utilizar o MsgBox que é a caixa de mensagens para passar uma informação ao usuário.
Vamos utilizar o código para encontrar a última linha preenchida, a estrutura de repetição For no VBA e os eventos no VBA para que o usuário consiga fazer essa ação através do botão.
Como você deve saber boa parte dos códigos nós já temos prontos, então vamos apenas copiá-los e fazer os devidos ajustes para criar esse código de alteração de informações!
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo o código abaixo dentro dos códigos já existentes no formulário
1) Compras
Private Sub BtAlterarCompras_Click()
Dim abaCompras As Object, abaCaixa As Object
Dim ultLin As Long, i As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Checar se o ID está preenchido
If CxIDCompras.Value = "" Then
MsgBox "O ID a ser alterado não está preenchido. Dê um duplo clique na movimentação a ser alterada."
Exit Sub
End If
Set abaCompras = Sheets("Compras")
Set abaCaixa = Sheets("Caixa")
'Alterar na aba Compras
ultLin = abaCompras.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCompras.Cells(i, 1).Value) = CLng(CxIDCompras.Value) Then
abaCompras.Cells(i, 2).Value = CDate(CxDataPCompras.Value)
abaCompras.Cells(i, 3).Value = CDate(CxDataCCompras.Value)
abaCompras.Cells(i, 4).Value = CxFornecedorCompras.Value
abaCompras.Cells(i, 5).Value = CxProdutoCompras.Value
abaCompras.Cells(i, 6).Value = CLng(CxQuantidadeCompras.Value)
abaCompras.Cells(i, 7).Value = CDbl(CxCustoTotalCompras.Value)
abaCompras.Range("A:G").Columns.AutoFit
End If
Next
'Alterando na aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCaixa.Cells(i, 1).Value) = CLng(CxIDCompras.Value) Then
abaCaixa.Cells(i, 2).Value = CDate(CxDataPCompras.Value)
abaCaixa.Cells(i, 3).Value = CDate(CxDataCCompras.Value)
abaCaixa.Cells(i, 4).Value = CxProdutoCompras.Value
abaCaixa.Cells(i, 5).Value = "Compra"
abaCaixa.Cells(i, 6).Value = CxContaCompras.Value
abaCaixa.Cells(i, 7).Value = -CDbl(CxCustoTotalCompras.Value)
abaCaixa.Cells(i, 8).Value = CxStatusCompras.Value
abaCaixa.Range("A:H").Columns.AutoFit
End If
Next
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemCaixa
Set abaCompras = Nothing
Set abaCaixa = Nothing
End Sub
Explicação do código acima (BtAlterarCompras_Click):
2) Vendas
Private Sub BtAlterarVendas_Click()
Dim abaVendas As Object, abaCaixa As Object
Dim ultLin As Long, i As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Checar se o ID está preenchido
If CxIDVendas.Value = "" Then
MsgBox "O ID a ser alterado não está preenchido. Dê um duplo clique na movimentação a ser alterada."
Exit Sub
End If
Set abaVendas = Sheets("Vendas")
Set abaCaixa = Sheets("Caixa")
'Alterar na aba Vendas
ultLin = abaVendas.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaVendas.Cells(i, 1).Value) = CLng(CxIDVendas.Value) Then
abaVendas.Cells(i, 2).Value = CDate(CxDataPVendas.Value)
abaVendas.Cells(i, 3).Value = CDate(CxDataCVendas.Value)
abaVendas.Cells(i, 4).Value = CxClienteVendas.Value
abaVendas.Cells(i, 5).Value = CxProdutoVendas.Value
abaVendas.Cells(i, 6).Value = CLng(CxQuantidadeVendas.Value)
abaVendas.Cells(i, 7).Value = CDbl(CxValorVendaVendas.Value)
abaVendas.Cells(i, 8).Value = CDbl(CxCustoUVendas.Value)
abaVendas.Cells(i, 9).Value = CDbl(CxCustoVVendas.Value)
abaVendas.Range("A:I").Columns.AutoFit
End If
Next
'Alterando na aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCaixa.Cells(i, 1).Value) = CLng(CxIDVendas.Value) Then
abaCaixa.Cells(i, 2).Value = CDate(CxDataPVendas.Value)
abaCaixa.Cells(i, 3).Value = CDate(CxDataCVendas.Value)
abaCaixa.Cells(i, 4).Value = CxProdutoVendas.Value
abaCaixa.Cells(i, 5).Value = "Venda"
abaCaixa.Cells(i, 6).Value = CxContaVendas.Value
abaCaixa.Cells(i, 7).Value = CDbl(CxValorVendaVendas.Value)
abaCaixa.Cells(i, 8).Value = CxStatusVendas.Value
abaCaixa.Range("A:H").Columns.AutoFit
End If
Next
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Set abaVendas = Nothing
Set abaCaixa = Nothing
End Sub
Explicação do código acima (BtAlterarVendas_Click):
3) Caixa
Private Sub BtAlterarCaixa_Click()
Dim abaVendas As Object, abaCaixa As Object, abaCompras As Object
Dim ultLin As Long, i As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Checar se o ID está preenchido
If CxIDCaixa.Value = "" Then
MsgBox "O ID a ser alterado não está preenchido. Dê um duplo clique na movimentação a ser alterada."
Exit Sub
End If
Set abaVendas = Sheets("Vendas")
Set abaCompras = Sheets("Compras")
Set abaCaixa = Sheets("Caixa")
'Alterar na aba Compras
ultLin = abaCompras.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCompras.Cells(i, 1).Value) = CLng(CxIDCaixa.Value) Then
abaCompras.Cells(i, 2).Value = CDate(CxDataPCaixa.Value)
abaCompras.Cells(i, 3).Value = CDate(CxDataCCaixa.Value)
abaCompras.Cells(i, 5).Value = CxDescricaoCaixa.Value
abaCompras.Cells(i, 7).Value = -CDbl(CxValorCaixa.Value)
abaCompras.Range("A:G").Columns.AutoFit
End If
Next
'Aterar na aba Vendas
ultLin = abaVendas.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaVendas.Cells(i, 1).Value) = CLng(CxIDCaixa.Value) Then
abaVendas.Cells(i, 2).Value = CDate(CxDataPCaixa.Value)
abaVendas.Cells(i, 3).Value = CDate(CxDataCCaixa.Value)
abaVendas.Cells(i, 5).Value = CxDescricaoCaixa.Value
abaVendas.Cells(i, 7).Value = CDbl(CxValorCaixa.Value)
abaVendas.Range("A:I").Columns.AutoFit
End If
Next
'Alterando na aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCaixa.Cells(i, 1).Value) = CLng(CxIDCaixa.Value) Then
abaCaixa.Cells(i, 2).Value = CDate(CxDataPCaixa.Value)
abaCaixa.Cells(i, 3).Value = CDate(CxDataCCaixa.Value)
abaCaixa.Cells(i, 4).Value = CxDescricaoCaixa.Value
abaCaixa.Cells(i, 5).Value = CxTipoCaixa.Value
abaCaixa.Cells(i, 6).Value = CxContaCaixa.Value
abaCaixa.Cells(i, 7).Value = CDbl(CxValorCaixa.Value)
abaCaixa.Cells(i, 8).Value = CxStatusCaixa.Value
abaCaixa.Range("A:H").Columns.AutoFit
End If
Next
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemCaixa
Set abaVendas = Nothing
Set abaCompras = Nothing
Set abaCaixa = Nothing
End Sub
Explicação do código acima (BtAlterarCaixa_Click):
OBS: Você tem a opção de “abrir”/criar cada Private Sub quando você clicar, em duplo clique, nos botões (objetos) diretamente no formulário.
Nesse caso, poderíamos optar por dar duplo clique no botão “Alterar” delas abas/páginas Compras, Vendas e Caixa, respectivamente, para abrir o código.
OBS: Explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS2: Para conferir mais detalhes sobre usar as funções do Excel no VBA (WorksheetFunction) você pode dar uma olhada nesse outro post em que abordamos justamente isso.
OBS3: Para conferir detalhes sobre as funções de conversão de tipo, dê uma olhada nesse link aqui.
Nessa aula (Controle para Empresas Aula22) você resumidamente lidou com:
Hoje em Controle para Empresas Aula23 vamos começar a atualização da aba de DRE para automatizar essa parte do nosso formulário.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima terceira aula (Controle para Empresas Aula23) da série, nessa aula vamos dar início a construção da macro para cálculo de DRE.
Vamos fazer esses cálculos no VBA ao invés de fazer no Excel, então vamos construir essa macro do zero para esses cálculos.
Vamos utilizar a estrutura condicional (função IF) que você já sabe como funciona, vamos utilizar o MsgBox (caixa de mensagens), pois vamos precisar informar o usuário.
Uma estrutura importante é o CLng para transformar valor para long (principalmente na parte de datas), pois o VBA acaba tendo dificuldades na comparação de datas com números.
O worksheetfunction você já deve conhecer, que é para usar funções do Excel no VBA, então vamos utilizar o SumIfs (que seria o SOMASES no VBA) para poder somar os valores corresponde ao ano desejado.
E claro, tudo isso vai estar dentro de um botão, então vamos precisar utilizar os eventos no VBA para que ao clicar essa macro seja executada!
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo o código abaixo dentro dos códigos já existentes no formulário
Private Sub btCarregarDRE_Click()
Dim recBruta As Double, dedRec As Double, recLiq As Double, cmv As Double
Dim resBruto As Double, despOp As Double, resAntIR As Double
Dim impRenda As Double, resLiq As Double
Dim anoAnalise As Long
Dim abaVendas As Object, abaCaixa As Object, abaDRE As Object
If cxAnoDRE.Value = "" Then
MsgBox "A caixa de ano está vazia. Favor preencher a caixa com o ano desejado."
Exit Sub
End If
Set abaVendas = Sheets("Vendas")
Set abaCaixa = Sheets("Caixa")
Set abaDRE = Sheets("DRE")
anoAnalise = CLng(cxAnoDRE.Value)
recBruta = WorksheetFunction.SumIfs(abaVendas.Range("G:G"), abaVendas.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, 1, 1)), abaVendas.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, 12, 31)))
dedRec = 0
recLiq = recBruta - dedRec
cmv = WorksheetFunction.SumIfs(abaVendas.Range("I:I"), abaVendas.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, 1, 1)), abaVendas.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, 12, 31)))
resBruto = recLiq - cmv
despOp = -WorksheetFunction.SumIfs(abaCaixa.Range("G:G"), abaCaixa.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, 1, 1)), abaCaixa.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, 12, 31)), abaCaixa.Range("E:E"), "Despesa")
resAntIR = resBruto - despOp
impRenda = recBruta * 0.06
resLiq = resAntIR - impRenda
abaDRE.Cells(1, 2).Value = anoAnalise
abaDRE.Cells(2, 2).Value = recBruta
abaDRE.Cells(3, 2).Value = dedRec
abaDRE.Cells(4, 2).Value = recLiq
abaDRE.Cells(5, 2).Value = cmv
abaDRE.Cells(6, 2).Value = resBruto
abaDRE.Cells(7, 2).Value = despOp
abaDRE.Cells(8, 2).Value = resAntIR
abaDRE.Cells(9, 2).Value = impRenda
abaDRE.Cells(10, 2).Value = resLiq
abaDRE.Cells(4, 3).Value = recLiq / recBruta
abaDRE.Cells(6, 3).Value = resBruto / recBruta
abaDRE.Cells(8, 3).Value = resAntIR / recBruta
abaDRE.Cells(10, 3).Value = resLiq / recBruta
abaDRE.Range("A:C").Columns.AutoFit
Set abaVendas = Nothing
Set abaCaixa = Nothing
Set abaDRE = Nothing
End Sub
Explicação do código acima:
Veja um exemplo pronto depois de rodar o DRE para o ano de 2021, mostrado em aula:
OBS: Para mais detalhes dos tipos de variáveis no VBA visite essa página.
OBS2: Explicamos a estrutura If em outro post do nosso blog também de forma detalhada, caso queira conferir.
OBS3: Para conferir mais detalhes sobre usar as funções do Excel no VBA (WorksheetFunction) você pode dar uma olhada nesse outro post em que abordamos justamente isso.
Até agora, na parte 1, conseguimos:
Nas próximas aulas vamos fechar o código dessa aba.
Nessa aula (Controle para Empresas Aula23) você resumidamente lidou com:
Hoje em Controle para Empresas Aula24 vamos dar continuidade a atualização da aba de DRE para trazer as informações para o formulário!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Hoje nós vamos dar continuidade a atualização da aba de DRE no nosso formulário para finalizar essa automação!
Nessa aula vamos tratar os valores em branco para evitar o erro de estouro no VBA, que acontece por conta da divisão por zero.
E vamos transformar o intervalo em imagem para que seja possível mostrar as informações do DRE como imagem dentro do formulário.
Nós já fizemos os cálculos DRE, mas ainda faltam alguns tratamentos para que possamos de fato visualizar o DRE dentro do formulário.
Como nossa macro para cálculo de DRE já está pronta, nós vamos começar com o ajuste dos valores em branco, ou seja, dos valores quando colocamos um ano que não temos informações.
Para isso vamos fazer um pequeno ajuste na nossa macro, que é já deixar todos os campos vazios antes de colocar os valores.
E em seguida inserimos um tratamento de erro no VBA com o On Error Resume Next no código dos cálculos do DRE.
Dessa forma independente do ano já vamos ter os valores vazios e se tiver algum erro no nosso cálculo, como a divisão por 0 (por não termos informações) o VBA vai simplesmente ignorar o erro e continuar com o código.
Depois de ignorar os cálculos que possivelmente podem retornar algum erro nós vamos utilizar o GoTo no VBA para “resetar” o padrão de erros e dar continuidade ao código.
OBS: Essa parte é para que o tratamento de erro funcione apenas para esses 4 cálculos que estamos fazendo, depois disso qualquer erro irá aparecer normalmente.
Isso concluí o tratamento de anos em branco, ou seja, dos anos que não temos nenhuma informação.
Agora nós vamos para a parte de transformar o intervalo em imagem, só que essa parte nós pegamos um código pronto, então não vale a pena decorar isso.
Vou deixar aqui o código que utilizei e a fonte de onde peguei esse código pronto, claro que foram feitas algumas modificações para o nosso código.
abaDRE.Select
abaDRE.Range("A1:C10").Copy
abaDRE.Range("R2").Select
abaDRE.Pictures.Paste Link:=True
abaDRE.Pictures.Select
Application.CutCopyMode = False
Dim meuGrafico As String, minhaImagem As String
Dim larguraImg As Long, alturaImg As Long
Application.ScreenUpdating = False
minhaImagem = Selection.Name
alturaImg = Selection.ShapeRange.Height
larguraImg = Selection.ShapeRange.Width
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="DRE"
Selection.Border.LineStyle = 0
meuGrafico = Selection.Name & " " & Split(ActiveChart.Name, " ")(2)
abaDRE.Shapes(meuGrafico).Width = larguraImg
abaDRE.Shapes(meuGrafico).Height = alturaImg
abaDRE.Shapes(minhaImagem).Copy
ActiveChart.ChartArea.Select
ActiveChart.Paste
O código foi tirado do site abaixo, então se quiser ver o código original pode acessar o link!
https://www.exceltrainingvideos.com/place-picture-excel-worksheet-range-into-user-form-with-vba/
Agora vamos a explicação desse código para que você entenda o que está sendo feito.
Vamos selecionar, copiar e colar como imagem o nosso DRE. Em seguida vamos obter a largura e altura da imagem.
Em seguida vamos criar um gráfico já com essas informações de altura e largura e vamos colar essa imagem dentro do gráfico.
Então ao rodar esse código nós vamos ter a imagem que colamos do nosso DRE e também o gráfico já com essa imagem.
Na próxima aula nós vamos dar continuidade ao código, pois temos mais uma parte para poder trazer essa informação para dentro do formulário.
Hoje em Controle para Empresas Aula25 vamos finalizar a atualização do DRE para inserir a imagem no formulário e automatizar essa parte!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Hoje nós vamos dar continuidade a série para poder finalizar a nossa atualização da aba de DRE para terminar a nossa automação.
Nessa aula vamos fazer os últimos passos para conseguir pegar o nosso DRE e passar para dentro do formulário.
hash
Como você já deve saber, nós já fizemos os cálculos DRE e estamos apenas fazendo um último ajuste na macro para cálculo de DRE para que possamos inserir a imagem dentro do formulário.
Na aula anterior nós pegamos um código já pronto e adaptamos para o nosso projeto. Hoje nós vamos pegar a continuação desse código para que possamos automatizar o cálculo por completo.
caminhoImagem = ThisWorkbook.Path & "\img.jpg"
'caminhoImagem = "C:\Users\damor\OneDrive\Área de Trabalho\Imagem DRE\img.jpg"
abaDRE.ChartObjects(1).Chart.Export Filename:=caminhoImagem, FilterName:="jpg"
abaDRE.Shapes(meuGrafico).Delete
Application.ScreenUpdating = True
imgDRE.Picture = LoadPicture(caminhoImagem)
abaDRE.Pictures.Delete
abaDRE.Range("A1").Select
Hoje vamos utilizar esse código para poder finalizar nossa automação. Aqui nós vamos salvar a imagem com VBA utilizando o mesmo caminho do nosso arquivo.
OBS: Nessa parte você pode utilizar o caminho do arquivo, ou pode utilizar a parte comentada que já tem o caminho completo do arquivo onde deseja salvar. Isso serve caso precise ou queira salvar em um lugar específico.
Em seguida nós vamos carregar essa imagem que salvamos dentro do nosso formulário.
Para finalizar nós vamos deletar a imagem que utilizamos como base que está colada e vamos selecionar a célula A1, pois os procedimentos foram feitos lá na coluna R.
IMPORTANTE: Essa parte do Application.ScreenUpdating é para ativar ou desativar a atualização da tela. Esse é um dos códigos que eu ensino para deixar seu código mais rápido no VBA.
Ao executar o código você vai notar que fazer tudo o que está no código dessa aula e da aula passada de forma bem rápida e vai atualizar o nosso formulário.
Assim você vai ter a visualização do DRE dentro do formulário, deixando-o mais completo!
Hoje em Controle para Empresas Aula26 vamos utilizar a caixa de combinação para preencher o formulário substituindo a caixa de texto!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima sexta aula da série, nessa aula vamos começar a aplicar as sugestões que vocês deram!
Hoje vou te mostrar como trocar caixa de texto por caixa de combinação, ou seja, vamos tirar as caixas de texto, onde o próprio usuário escreve e vamos substituir pelas caixas de combinação no VBA.
Com essas caixas você vai poder definir as opções disponíveis para seleção, então o usuário só vai poder selecionar o que estiver dentro dessa caixa.
Dessa forma você vai evitar de inserir informações erradas dentro da sua tabela. Então vamos ter que criar as listas de opções no formulário para cada uma das opções que temos.
E com isso vamos poder atualizar caixa de combinação com essas informações, dessa forma vamos facilitar o uso para o usuário final!
Outro ponto muito importante é que nessa substituição você não vai poder trocar o nome que já tínhamos dado as caixas de texto, caso contrário você vai ter que fazer essa alteração em todo o código.
Acessando o UserForm
Para acessar o UserForm, precisamos:
OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up (janela flutuante no canto inferior esquerdo, na imagem acima) 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.
Caixa de combinação
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
OBS: A cada caixa de combinação criada nós vamos excluir a caixa de texto a ser substituída.
OBS2: Vamos manter os nomes das caixas anteriores, para que não precisemos mudar várias partes dos códigos já prontas. Assim, não precisaremos mexer em códigos anteriores, apenas programar os novos comandos necessários.
Ao final da criação dos objetos, nosso formulário ficará da seguinte maneira:
Criando aba Cadastro e listas (fontes de dados)
Vamos listar exatamente o que queremos ter naquelas caixas de combinação criadas. Elas servirão de fonte de dados/opções na lista suspensa de escolha de cada caixa de combinação.
Observe abaixo as listas criadas.
OBS3: A cada coluna vamos acabar inserindo uma tabela, para facilitar o código que vai puxar essas fontes de dados. Vamos selecionar cada coluna e ir na guia Inserir > Tabela
OBS4: Daremos nomes intuitivos a cada tabela, para que sejam referenciadas no código de forma fácil. Ex: TabProduto.
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo o código abaixo dentro dos códigos já existentes no formulário
Private Sub UserForm_Initialize()
BlocoDeAbas.Value = 0
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Call atualizaCaixaDeListagemEstoque
CxFornecedorCompras.List = Sheets("Cadastro").ListObjects("TabFornecedor").ListColumns(1).DataBodyRange.Value
CxProdutoCompras.List = Sheets("Cadastro").ListObjects("TabProduto").ListColumns(1).DataBodyRange.Value
CxContaCompras.List = Sheets("Cadastro").ListObjects("TabConta").ListColumns(1).DataBodyRange.Value
CxStatusCompras.List = Sheets("Cadastro").ListObjects("TabStatus").ListColumns(1).DataBodyRange.Value
End Sub
Explicação do código acima:
Na aula de hoje (Controle para Empresas Aula26) você lidou com:
Hoje em Controle para Empresas Aula27 vamos dar continuidade as sugestões de vocês para acrescentar no formulário!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima sétima aula da série, nessa aula vamos dar continuidade a aula anterior para trocar as caixas de texto por caixas de combinação.
Vamos, então, continuar esse processo para trocar essas caixas de texto por caixas de combinação no VBA, agora nas abas de Vendas, Caixa e DRE.
Essa alteração é para evitar com que o usuário insira informações incorretas, então a ideia é atualizar a caixa de combinação no VBA somente com as opções que você definir em uma lista.
Com essa lista de opções no formulário o usuário já vai ter as opções pré-definidas e não vai poder inserir qualquer outra informação que não seja o que você já selecionou.
Essa ferramenta é similar a validação de dados por lista, onde o usuário só visualiza e só pode utilizar as opções que foram dadas, qualquer outra opção não será aceita.
Com isso você evita com que pessoas que não sabem mexer no sistema a colocar informação errada, ou até evitar um erro de digitação que é algo muito comum.
Acessando o UserForm
Para acessar o UserForm, precisamos:
OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up (janela flutuante no canto inferior esquerdo, na imagem acima) 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.
Caixa de combinação
Precisaremos inserir alguns botões de comando, que nas próximas aulas vão acionar os nossos códigos e interagir com as caixas de texto e a caixa de listagem criadas.
Para isso, temos que, com a caixa de ferramenta aberta:
OBS: A cada caixa de combinação criada nós vamos excluir a caixa de texto a ser substituída.
OBS2: Vamos manter os nomes das caixas anteriores, para que não precisemos mudar várias partes dos códigos já prontas. Assim, não precisaremos mexer em códigos anteriores, apenas programar os novos comandos necessários.
Vamos fazer as seguintes criações/substituições:
AbaVendas (formulário)
AbaCaixa (formulário)
AbaEstoque (formulário)
Aba de nome “Cadastro” (planilha)
Acessando o código do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo o código abaixo dentro dos códigos já existentes no formulário
Private Sub UserForm_Initialize()
BlocoDeAbas.Value = 0
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Call atualizaCaixaDeListagemEstoque
CxFornecedorCompras.List = Sheets("Cadastro").ListObjects("TabFornecedor").ListColumns(1).DataBodyRange.Value
CxProdutoCompras.List = Sheets("Cadastro").ListObjects("TabProduto").ListColumns(1).DataBodyRange.Value
CxContaCompras.List = Sheets("Cadastro").ListObjects("TabConta").ListColumns(1).DataBodyRange.Value
CxStatusCompras.List = Sheets("Cadastro").ListObjects("TabStatus").ListColumns(1).DataBodyRange.Value
CxClienteVendas.List = Sheets("Cadastro").ListObjects("TabCliente").ListColumns(1).DataBodyRange.Value
CxProdutoVendas.List = Sheets("Cadastro").ListObjects("TabProduto").ListColumns(1).DataBodyRange.Value
CxContaVendas.List = Sheets("Cadastro").ListObjects("TabConta").ListColumns(1).DataBodyRange.Value
CxStatusVendas.List = Sheets("Cadastro").ListObjects("TabStatus").ListColumns(1).DataBodyRange.Value
CxTipoCaixa.List = Sheets("Cadastro").ListObjects("TabTipo").ListColumns(1).DataBodyRange.Value
CxContaCaixa.List = Sheets("Cadastro").ListObjects("TabConta").ListColumns(1).DataBodyRange.Value
CxStatusCaixa.List = Sheets("Cadastro").ListObjects("TabStatus").ListColumns(1).DataBodyRange.Value
cxAnoDRE.List = Sheets("Cadastro").ListObjects("TabAno").ListColumns(1).DataBodyRange.Value
End Sub
Explicação do código acima:
Disparar macro ao fechar formulário: evento terminate
Private Sub UserForm_Terminate()
Application.Visible = True
If BlocoDeAbas.Value = 0 Or BlocoDeAbas.Value = 1 Then
ThisWorkbook.Sheets("Compras").Select
ElseIf BlocoDeAbas.Value = 2 Then
ThisWorkbook.Sheets("Vendas").Select
ElseIf BlocoDeAbas.Value = 3 Then
ThisWorkbook.Sheets("Estoque").Select
ElseIf BlocoDeAbas.Value = 4 Then
ThisWorkbook.Sheets("Caixa").Select
Else
ThisWorkbook.Sheets("DRE").Select
End If
End Sub
Explicação do código acima:
Disparar macro ao abrir a planilha: evento de abertura
Para fazer com que a nossa macro rode automaticamente ao abrir a planilha, deveremos utilizar de um evento no VBA, mais especificamente falando de um evento de abertura da planilha.
Um evento nada mais é do que um acontecimento que vai fazer alguma(s) ação(ões) disparar: o nosso código.
Com o VBA aberto, teremos que programar um evento Workbook_Open da forma mostrada abaixo, clicando duas vezes no menu à esquerda em “EstaPastaDeTrabalho”, e colocando o seguinte código:
Private Sub Workbook_Open()
Application.Visible = False
ControleDaEmpresa.Show
End Sub
Explicação do código acima:
Nessa aula (Controle para Empresas Aula27) você lidou com:
Hoje em Controle para Empresas Aula28 vamos criar uma análise mensal do DRE, então teremos a análise anual e mensal!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima oitava aula (Controle para Empresas Aula28) da série, nessa aula vamos criar uma análise do DRE mensal e fazer algumas validações que vocês deram como sugestão.
Inicialmente nós vamos fazer uma validação sugerida por vocês que é uma mensagem de confirmação no VBA para excluir ou alterar um item.
Isso é muito importante até como segurança caso clique na opção sem querer, então é sempre bom ter uma segunda verificação.
Então vamos criar uma confirmação para excluir um item no VBA e uma validação para alterar um item no VBA.
Para isso vamos apenas adicionar a estrutura condicional if no VBA com uma msgbox (caixa de mensagem no VBA) para perguntar ao usuário se de fato deseja excluir ou alterar a informação.
Depois nós vamos partir para a análise mensal do DRE, pois até então nós tínhamos apenas uma análise mensal!
1) Verificação na hora de Excluir (e Alterar)
Em primeiro lugar vamos incluir linhas de código específicas para criar uma verificação antes de excluir qualquer movimentação/cadastro do nosso formulário/planilha.
Para fazer isso, deveremos acessar o código do nosso formulário, e ir diretamente no código que faz a exclusão, da seguinte forma.
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub BtExcluirCaixa_Click()
If CxIDCaixa.Value = "" Then
MsgBox "O ID a ser excluído não está preenchido. Dê um duplo clique na movimentação a ser excluída."
Exit Sub
End If
If MsgBox("Você realmente quer excluir essa movimentação?", vbYesNo) <> 6 Then Exit Sub
excluirID (CxIDCaixa.Value)
Call limparCamposDoFormulario
Call atualizaCaixaDeListagemCaixa
End Sub
Private Sub BtExcluirCompras_Click()
If CxIDCompras.Value = "" Then
MsgBox "O ID a ser excluído não está preenchido. Dê um duplo clique na movimentação a ser excluída."
Exit Sub
End If
If MsgBox("Você realmente quer excluir essa movimentação?", vbYesNo) <> 6 Then Exit Sub
excluirID (CxIDCompras.Value)
Call limparCamposDoFormulario
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemCaixa
End Sub
Private Sub BtExcluirVendas_Click()
If CxIDVendas.Value = "" Then
MsgBox "O ID a ser excluído não está preenchido. Dê um duplo clique na movimentação a ser excluída."
Exit Sub
End If
If MsgBox("Você realmente quer excluir essa movimentação?", vbYesNo) <> 6 Then Exit Sub
excluirID (CxIDVendas.Value)
Call limparCamposDoFormulario
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
End Sub
Explicação das macros atreladas aos botões de Excluir, das abas respectivas de Caixa, Compras e Vendas:
Inserindo os códigos abaixo dentro dos códigos já existentes no formulário
Private Sub BtAlterarCaixa_Click()
Dim abaVendas As Object, abaCaixa As Object, abaCompras As Object
Dim ultLin As Long, i As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Checar se o ID está preenchido
If CxIDCaixa.Value = "" Then
MsgBox "O ID a ser alterado não está preenchido. Dê um duplo clique na movimentação a ser alterada."
Exit Sub
End If
If MsgBox("Você realmente quer alterar essa movimentação?", vbYesNo) <> 6 Then Exit Sub
Set abaVendas = Sheets("Vendas")
Set abaCompras = Sheets("Compras")
Set abaCaixa = Sheets("Caixa")
'Alterar na aba Compras
ultLin = abaCompras.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCompras.Cells(i, 1).Value) = CLng(CxIDCaixa.Value) Then
abaCompras.Cells(i, 2).Value = CDate(CxDataPCaixa.Value)
abaCompras.Cells(i, 3).Value = CDate(CxDataCCaixa.Value)
abaCompras.Cells(i, 5).Value = CxDescricaoCaixa.Value
abaCompras.Cells(i, 7).Value = -CDbl(CxValorCaixa.Value)
abaCompras.Range("A:G").Columns.AutoFit
End If
Next
'Alterar na aba Vendas
ultLin = abaVendas.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaVendas.Cells(i, 1).Value) = CLng(CxIDCaixa.Value) Then
abaVendas.Cells(i, 2).Value = CDate(CxDataPCaixa.Value)
abaVendas.Cells(i, 3).Value = CDate(CxDataCCaixa.Value)
abaVendas.Cells(i, 5).Value = CxDescricaoCaixa.Value
abaVendas.Cells(i, 7).Value = CDbl(CxValorCaixa.Value)
abaVendas.Range("A:I").Columns.AutoFit
End If
Next
'Alterando na aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCaixa.Cells(i, 1).Value) = CLng(CxIDCaixa.Value) Then
abaCaixa.Cells(i, 2).Value = CDate(CxDataPCaixa.Value)
abaCaixa.Cells(i, 3).Value = CDate(CxDataCCaixa.Value)
abaCaixa.Cells(i, 4).Value = CxDescricaoCaixa.Value
abaCaixa.Cells(i, 5).Value = CxTipoCaixa.Value
abaCaixa.Cells(i, 6).Value = CxContaCaixa.Value
abaCaixa.Cells(i, 7).Value = CDbl(CxValorCaixa.Value)
abaCaixa.Cells(i, 8).Value = CxStatusCaixa.Value
abaCaixa.Range("A:H").Columns.AutoFit
End If
Next
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemCaixa
Set abaVendas = Nothing
Set abaCompras = Nothing
Set abaCaixa = Nothing
End Sub
Private Sub BtAlterarCompras_Click()
Dim abaCompras As Object, abaCaixa As Object
Dim ultLin As Long, i As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Checar se o ID está preenchido
If CxIDCompras.Value = "" Then
MsgBox "O ID a ser alterado não está preenchido. Dê um duplo clique na movimentação a ser alterada."
Exit Sub
End If
If MsgBox("Você realmente quer alterar essa movimentação?", vbYesNo) <> 6 Then Exit Sub
Set abaCompras = Sheets("Compras")
Set abaCaixa = Sheets("Caixa")
'Alterar na aba Compras
ultLin = abaCompras.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCompras.Cells(i, 1).Value) = CLng(CxIDCompras.Value) Then
abaCompras.Cells(i, 2).Value = CDate(CxDataPCompras.Value)
abaCompras.Cells(i, 3).Value = CDate(CxDataCCompras.Value)
abaCompras.Cells(i, 4).Value = CxFornecedorCompras.Value
abaCompras.Cells(i, 5).Value = CxProdutoCompras.Value
abaCompras.Cells(i, 6).Value = CLng(CxQuantidadeCompras.Value)
abaCompras.Cells(i, 7).Value = CDbl(CxCustoTotalCompras.Value)
abaCompras.Range("A:G").Columns.AutoFit
End If
Next
'Alterando na aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCaixa.Cells(i, 1).Value) = CLng(CxIDCompras.Value) Then
abaCaixa.Cells(i, 2).Value = CDate(CxDataPCompras.Value)
abaCaixa.Cells(i, 3).Value = CDate(CxDataCCompras.Value)
abaCaixa.Cells(i, 4).Value = CxProdutoCompras.Value
abaCaixa.Cells(i, 5).Value = "Compra"
abaCaixa.Cells(i, 6).Value = CxContaCompras.Value
abaCaixa.Cells(i, 7).Value = -CDbl(CxCustoTotalCompras.Value)
abaCaixa.Cells(i, 8).Value = CxStatusCompras.Value
abaCaixa.Range("A:H").Columns.AutoFit
End If
Next
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemCompras
Call atualizaCaixaDeListagemCaixa
Set abaCompras = Nothing
Set abaCaixa = Nothing
End Sub
Private Sub BtAlterarVendas_Click()
Dim abaVendas As Object, abaCaixa As Object
Dim ultLin As Long, i As Long
'Validando os campos do formulário
If checarCamposVazios Then Exit Sub
'Checar se o ID está preenchido
If CxIDVendas.Value = "" Then
MsgBox "O ID a ser alterado não está preenchido. Dê um duplo clique na movimentação a ser alterada."
Exit Sub
End If
If MsgBox("Você realmente quer alterar essa movimentação?", vbYesNo) <> 6 Then Exit Sub
Set abaVendas = Sheets("Vendas")
Set abaCaixa = Sheets("Caixa")
'Alterar na aba Vendas
ultLin = abaVendas.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaVendas.Cells(i, 1).Value) = CLng(CxIDVendas.Value) Then
abaVendas.Cells(i, 2).Value = CDate(CxDataPVendas.Value)
abaVendas.Cells(i, 3).Value = CDate(CxDataCVendas.Value)
abaVendas.Cells(i, 4).Value = CxClienteVendas.Value
abaVendas.Cells(i, 5).Value = CxProdutoVendas.Value
abaVendas.Cells(i, 6).Value = CLng(CxQuantidadeVendas.Value)
abaVendas.Cells(i, 7).Value = CDbl(CxValorVendaVendas.Value)
abaVendas.Cells(i, 8).Value = CDbl(CxCustoUVendas.Value)
abaVendas.Cells(i, 9).Value = CDbl(CxCustoVVendas.Value)
abaVendas.Range("A:I").Columns.AutoFit
End If
Next
'Alterando na aba Caixa
ultLin = abaCaixa.Range("A1000000").End(xlUp).Row
For i = 2 To ultLin
If CLng(abaCaixa.Cells(i, 1).Value) = CLng(CxIDVendas.Value) Then
abaCaixa.Cells(i, 2).Value = CDate(CxDataPVendas.Value)
abaCaixa.Cells(i, 3).Value = CDate(CxDataCVendas.Value)
abaCaixa.Cells(i, 4).Value = CxProdutoVendas.Value
abaCaixa.Cells(i, 5).Value = "Venda"
abaCaixa.Cells(i, 6).Value = CxContaVendas.Value
abaCaixa.Cells(i, 7).Value = CDbl(CxValorVendaVendas.Value)
abaCaixa.Cells(i, 8).Value = CxStatusVendas.Value
abaCaixa.Range("A:H").Columns.AutoFit
End If
Next
'Limpar campos do formulário
Call limparCamposDoFormulario
'Atualizar Caixa de Listagem
Call atualizaCaixaDeListagemVendas
Call atualizaCaixaDeListagemCaixa
Set abaVendas = Nothing
Set abaCaixa = Nothing
End Sub
Explicação das macros atreladas aos botões de Alterar, das abas respectivas de Caixa, Compras e Vendas:
2) Copiar botão de Nova Opção
Vamos simplesmente acessar o formulário, copiar o botão de Nova Opção criado nas aulas anteriores, e colar nas abas que acharmos necessário.
3) Inclusão de mês na aba DRE
Vamos acrescentar uma combobox, e uma label que representem o mês, na aba de DRE. Para isso poderemos copiar as que já existem lá apontando para o ano.
Ficará da seguinte forma:
Além disso, vamos incluir na aba “Cadastro” da planilha uma coluna representando os meses do ano, em números, com o adendo de uma célula em branco (opção que usaremos para pegar informação de todos os meses). Dessa forma:
Com isso, poderemos fazer as alterações no código para gerar o DRE incluindo o mês na análise, da seguinte forma:
Private Sub btCarregarDRE_Click()
Dim recBruta As Double, dedRec As Double, recLiq As Double, cmv As Double
Dim resBruto As Double, despOp As Double, resAntIR As Double
Dim impRenda As Double, resLiq As Double
Dim anoAnalise As Long, mesAnalise As Integer
Dim abaVendas As Object, abaCaixa As Object, abaDRE As Object
If cxAnoDRE.Value = "" Then
MsgBox "A caixa de ano está vazia. Favor preencher a caixa com o ano desejado."
Exit Sub
End If
Set abaVendas = Sheets("Vendas")
Set abaCaixa = Sheets("Caixa")
Set abaDRE = Sheets("DRE")
anoAnalise = CLng(cxAnoDRE.Value)
If cxMesDRE.Value = "" Then
mesAnalise = 0
recBruta = WorksheetFunction.SumIfs(abaVendas.Range("G:G"), abaVendas.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, 1, 1)), abaVendas.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, 12, 31)))
dedRec = 0
recLiq = recBruta - dedRec
cmv = WorksheetFunction.SumIfs(abaVendas.Range("I:I"), abaVendas.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, 1, 1)), abaVendas.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, 12, 31)))
resBruto = recLiq - cmv
despOp = -WorksheetFunction.SumIfs(abaCaixa.Range("G:G"), abaCaixa.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, 1, 1)), abaCaixa.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, 12, 31)), abaCaixa.Range("E:E"), "Despesa")
resAntIR = resBruto - despOp
impRenda = recBruta * 0.06
resLiq = resAntIR - impRenda
abaDRE.Cells(1, 1).Value = "Ano"
abaDRE.Cells(1, 2).Value = anoAnalise
abaDRE.Cells(1, 2).NumberFormat = "General"
Else
mesAnalise = CInt(cxMesDRE.Value)
recBruta = WorksheetFunction.SumIfs(abaVendas.Range("G:G"), abaVendas.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, mesAnalise, 1)), abaVendas.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, mesAnalise + 1, 1)) - 1)
dedRec = 0
recLiq = recBruta - dedRec
cmv = WorksheetFunction.SumIfs(abaVendas.Range("I:I"), abaVendas.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, mesAnalise, 1)), abaVendas.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, mesAnalise + 1, 1)) - 1)
resBruto = recLiq - cmv
despOp = -WorksheetFunction.SumIfs(abaCaixa.Range("G:G"), abaCaixa.Range("C:C"), ">=" & CLng(DateSerial(anoAnalise, mesAnalise, 1)), abaCaixa.Range("C:C"), "<=" & CLng(DateSerial(anoAnalise, mesAnalise + 1, 1)) - 1, abaCaixa.Range("E:E"), "Despesa")
resAntIR = resBruto - despOp
impRenda = recBruta * 0.06
resLiq = resAntIR - impRenda
abaDRE.Cells(1, 1).Value = "Mês"
abaDRE.Cells(1, 2).Value = mesAnalise & "/" & anoAnalise
End If
abaDRE.Cells(2, 2).Value = recBruta
abaDRE.Cells(3, 2).Value = dedRec
abaDRE.Cells(4, 2).Value = recLiq
abaDRE.Cells(5, 2).Value = cmv
abaDRE.Cells(6, 2).Value = resBruto
abaDRE.Cells(7, 2).Value = despOp
abaDRE.Cells(8, 2).Value = resAntIR
abaDRE.Cells(9, 2).Value = impRenda
abaDRE.Cells(10, 2).Value = resLiq
abaDRE.Cells(4, 3).Value = ""
abaDRE.Cells(6, 3).Value = ""
abaDRE.Cells(8, 3).Value = ""
abaDRE.Cells(10, 3).Value = ""
On Error Resume Next
abaDRE.Cells(4, 3).Value = recLiq / recBruta
abaDRE.Cells(6, 3).Value = resBruto / recBruta
abaDRE.Cells(8, 3).Value = resAntIR / recBruta
abaDRE.Cells(10, 3).Value = resLiq / recBruta
On Error GoTo 0
'abaDRE.Range("A:C").Columns.AutoFit
'https://www.exceltrainingvideos.com/place-picture-excel-worksheet-range-into-user-form-with-vba/
abaDRE.Select
abaDRE.Range("A1:C10").Copy
abaDRE.Range("R2").Select
abaDRE.Pictures.Paste Link:=True
abaDRE.Pictures.Select
Application.CutCopyMode = False
Dim meuGrafico As String, minhaImagem As String, caminhoImagem As String
Dim larguraImg As Long, alturaImg As Long
Application.ScreenUpdating = False
minhaImagem = Selection.Name
alturaImg = Selection.ShapeRange.Height
larguraImg = Selection.ShapeRange.Width
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="DRE"
Selection.Border.LineStyle = 0
meuGrafico = Selection.Name & " " & Split(ActiveChart.Name, " ")(2)
abaDRE.Shapes(meuGrafico).Width = larguraImg
abaDRE.Shapes(meuGrafico).Height = alturaImg
abaDRE.Shapes(minhaImagem).Copy
ActiveChart.ChartArea.Select
ActiveChart.Paste
'caminhoImagem = ThisWorkbook.Path & "img.jpg"
caminhoImagem = "C:UsersdamorOneDriveÁrea de TrabalhoImagem DREimg.jpg"
abaDRE.ChartObjects(1).Chart.Export Filename:=caminhoImagem, FilterName:="jpg"
abaDRE.Shapes(meuGrafico).Delete
Application.ScreenUpdating = True
imgDRE.Picture = LoadPicture(caminhoImagem)
abaDRE.Pictures.Delete
abaDRE.Range("A1").Select
Set abaVendas = Nothing
Set abaCaixa = Nothing
Set abaDRE = Nothing
End Sub
Vamos focar aqui nas mudanças que aconteceram na aula, quando inserimos o mês de análise no DRE. Para conferir as explicações completas da macro “Private Sub btCarregarDRE_Click” recomendamos olhar as aulas anteriores (parte 1, parte 2, parte 3).
Explicação das mudanças na macro de Carregar o DRE (destacadas em negrito):
Exemplo de análise anual já foi visto nas aulas anteriores.
Exemplo de DRE com mês de análise incluso:
Nessa aula (Controle para Empresas Aula28) você lidou com:
Hoje em Controle para Empresas Aula29 vamos criar um filtro para o estoque e vamos inserir a logo da empresa no formulário!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a vigésima nona aula da série, nessa aula vamos trabalhar com filtros no VBA e inserção de imagem no VBA.
Vamos fazer um filtro de estoque para que você consiga filtrar apenas os produtos que quiser e facilitar a sua busca.
Para isso vamos utilizar a estrutura condicional if no VBA e alguns códigos que já temos pronto dentro das macros no VBA.
E vamos atualizar a caixa de listagem no VBA com essas informações filtradas para que o usuário tenha uma visualização mais específica do que está buscando.
Boa parte do que vamos ver na aula vocês já sabem, vamos apenas fazer essas aplicações. Isso é bom para que vocês possam observar que mesmo com códigos que você já tem no seu próprio projeto, você pode criar ainda mais funcionalidades!
Acessando os códigos do formulário
Em primeiro lugar vamos incluir a imagem de logo da Hashtag no formulário, e depois incluir linhas de código específicas para filtrar um produto na aba Estoque..
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Inserindo imagem no formulário
Para colocar a colocar a logo (imagem) da Hashtag no em qualquer aba do nosso formulário, precisamos:
Filtrar produtos na aba Estoque
Para preparar a parte visual precisaremos incluir uma caixa de texto, e um botão de comando, que sirvam de entrada de dados e o clique que dispare ação de filtrar, respectivamente.
Vamos copiar formas já prontas de outras abas, mudar apenas os nomes dos objetos, e suas propriedades Caption, como mostrado na videoaula. Veja abaixo o resultado:
Em seguida, criaremos uma aba auxiliar, a Estoque_Aux, que vai ser uma aba que vai participar da atualização da caixa de listagem da aba de estoque do formulário.
Para acessar o código do botão de filtragem, precisaremos modificar a sub respectiva criada que ele chama, ao ser clicado. A macro criada, no caso, é a atualizaCaixaDeListagemEstoque.
Sub atualizaCaixaDeListagemEstoque()
Dim abaEstoque As Object, abaEstoqueAux As Object, abaCompras As Object, abaVendas As Object
Dim ultLin As Long, linha As Long
Set abaEstoque = Sheets("Estoque")
Set abaEstoqueAux = Sheets("Estoque_Aux")
Set abaCompras = Sheets("Compras")
Set abaVendas = Sheets("Vendas")
ultLin = abaEstoque.Range("A1000000").End(xlUp).Row
If ultLin > 1 Then
For linha = 2 To ultLin
abaEstoque.Cells(linha, 2).Value = WorksheetFunction.SumIf(abaCompras.Range("E:E"), abaEstoque.Cells(linha, 1).Value, abaCompras.Range("F:F"))
abaEstoque.Cells(linha, 3).Value = WorksheetFunction.SumIf(abaVendas.Range("E:E"), abaEstoque.Cells(linha, 1).Value, abaVendas.Range("F:F"))
abaEstoque.Cells(linha, 4).Value = abaEstoque.Cells(linha, 2).Value - abaEstoque.Cells(linha, 3).Value
Next
End If
If ControleDaEmpresa.CxProcuraEstoque.Value = "" Then
ControleDaEmpresa.CxListagemEstoque.ColumnCount = 4
ControleDaEmpresa.CxListagemEstoque.ColumnHeads = True
ControleDaEmpresa.CxListagemEstoque.ColumnWidths = "125;125;125;125"
ControleDaEmpresa.CxListagemEstoque.RowSource = "Estoque!A2:D" & ultLin
Else
abaEstoque.Range("A1").CurrentRegion.AutoFilter 1, "*" & ControleDaEmpresa.CxProcuraEstoque.Value & "*"
abaEstoqueAux.UsedRange.Delete
abaEstoque.Range("A1").CurrentRegion.Copy abaEstoqueAux.Range("A1")
abaEstoque.AutoFilterMode = False
ultLin = abaEstoqueAux.Range("A1000000").End(xlUp).Row
If ultLin = 1 Then ultLin = 2
ControleDaEmpresa.CxListagemEstoque.ColumnCount = 4
ControleDaEmpresa.CxListagemEstoque.ColumnHeads = True
ControleDaEmpresa.CxListagemEstoque.ColumnWidths = "125;125;125;125"
ControleDaEmpresa.CxListagemEstoque.RowSource = "Estoque_Aux!A2:D" & ultLin
End If
End Sub
Explicação das mudanças da macro, em negrito:
Nessa aula (Controle para Empresas Aula29) você lidou com:
Hoje em Controle para Empresas Aula30 vamos fazer o cálculo automático do valor de venda para facilitar o preenchimento!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a trigésima aula da série, nessa aula nós vamos continuar com as sugestões de vocês!
Vamos fazer o preenchimento automático do valor de venda de um produto. A ideia é criar um preenchimento automático no VBA caso o produto já tenha sido vendido.
Assim vamos poder facilitar o preenchimento desse valor e agilizar o preenchimento das informações. Caso não o produto não tenha sido vendido não vamos fazer nenhum cálculo.
Outro ponto interessante é que se você quiser vender o mesmo produto, só que com um valor diferente ou desconto, vai poder alterar esse preenchimento de forma manual sem problema algum.
Para a construção da macro vamos utilizar a estrutura condicional if no VBA, a estrutura de repetição for no VBA e o CountIF (que é o CONT.SE no VBA).
Inserindo um módulo
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Como não temos nenhum módulo criado antes nessa planilha, vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Mudaremos a sua propriedade name para “modValorVenda” e colocaremos a seguinte sub dentro dele, que será um objeto de estudo da aula de hoje:
Sub calcularValorVenda()
If ControleDaEmpresa.CxProdutoVendas.Value = "" Or ControleDaEmpresa.CxQuantidadeVendas.Value = "" Then
Exit Sub
End If
Dim abaVendas As Worksheet
Dim produto As String
Dim qtd As Integer
Dim i As Long, ultLin As Long
Dim valorVendaUnit As Double
Set abaVendas = ThisWorkbook.Worksheets("Vendas")
produto = ControleDaEmpresa.CxProdutoVendas.Value
qtd = WorksheetFunction.CountIf(abaVendas.Range("E:E"), produto)
If qtd = 0 Then Exit Sub
ultLin = abaVendas.Range("A1048576").End(xlUp).Row
For i = ultLin To 2 Step -1
If abaVendas.Cells(i, 5).Value = produto Then
valorVendaUnit = abaVendas.Cells(i, 7).Value / abaVendas.Cells(i, 6).Value
Exit For
End If
Next
ControleDaEmpresa.CxValorVendaVendas.Value = Format(valorVendaUnit * ControleDaEmpresa.CxQuantidadeVendas.Value, "#,##0.00")
Set abaVendas = Nothing
End Sub
Explicação do código acima (calcularValorVenda):
Acessando os códigos do formulário
Já construímos o código necessário para o cálculo do valor de venda automático. Agora precisamos fazer o formulário interpretar e acionar esse cálculo.
Precisaremos, então, fazer uma modificação nos códigos das caixas de Produto e Quantidade da aba Vendas, para que elas ativem o cálculo, se necessário for.
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 controle da empresa.
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 ControleDaEmpresa > exibir código. Quer aprender tudo sobre o VBA? Confira curso avançado de VBA da Hashtag.
Macros a serem alteradas dentro do formulário:
Private Sub CxProdutoVendas_Change()
Call calcularCustoVenda
Call calcularValorVenda
End Sub
Private Sub CxQuantidadeVendas_Change()
Call calcularCustoVenda
Call calcularValorVenda
End Sub
Explicação dos códigos acima:
Nessa aula você lidou com:
Hoje em Controle para Empresas Aula31 vamos criar a parte de impressão automática do relatório de estoque a comprar!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a trigésima primeira aula da série, nessa aula nós vamos continuar com as sugestões de vocês!
Hoje nós vamos adicionar uma opção para imprimir relatório de estoque a comprar! Isso mesmo você vai poder imprimir relatório com VBA.
Dessa forma você já vai poder verificar quais produtos precisam ser comprados e vai poder imprimir essa lista para facilitar o seu trabalho.
A ideia é utilizar o estoque mínimo de produtos no VBA como base para imprimir esse relatório. Claro que nessa aula vamos criar essa coluna de estoque mínimo e inserir essa opção na hora de registrar um produto.
Outra opção vai ser gerar PDF de estoque, então você vai poder imprimir diretamente ou gerar PDF com VBA.
Uma última opção caso queira acrescentar é fazer uma pré-visualização de impressão antes de imprimir direto.
Esse último procedimento é interessante quando precisa confirmar se as informações estão de fato corretas.
Modificações na planilha
Para criar a impressão de um “relatório” para o estoque, precisaremos também de uma nova informação que não colocamos antes na planilha: estoque mínimo.
Para isso, precisaremos ir na abas “Estoque” e “Estoque_Aux” da nossa planilha, e criar uma coluna extra (na coluna E de ambas) a coluna que vai receber o Estoque Mínimo. Veja abaixo:
Aba “Estoque”
Aba “Estoque_Aux”
Esse valor de estoque mínimo vai ser inserido na planilha através de uma InputBox dentro do código de adição de produtos na planilha, como foi pontuado no vídeo.
Para saber mais sobre como lidar com uma InputBox no VBA, visite esse link.
Vamos também inserir um botão com o texto “Relatório”, na aba/página Estoque do nosso formulário, para receber o código de formatação e impressão, ou salvamento de PDF que vamos ver a seguir. Veja:
Acessando os códigos do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Macros a serem alteradas dentro do formulário:
Private Sub btRelatorioEstoque_Click()
Dim abaEstoque As Worksheet, abaEstoqueAux As Worksheet
Dim ultLin As Long, i As Long, priLin As Long
Dim caminhoPDF As String
Dim resp As Integer
Set abaEstoque = ThisWorkbook.Worksheets("Estoque")
Set abaEstoqueAux = ThisWorkbook.Worksheets("Estoque_Aux")
ultLin = abaEstoque.Range("A1048576").End(xlUp).Row
abaEstoqueAux.UsedRange.Clear
abaEstoque.Range("A1:E1").Copy abaEstoqueAux.Range("A1")
For i = 2 To ultLin
If abaEstoque.Cells(i, 4).Value < abaEstoque.Cells(i, 5).Value Then
priLin = abaEstoqueAux.Range("A1048576").End(xlUp).Row + 1
abaEstoque.Range("A" & i & ":E" & i).Copy abaEstoqueAux.Cells(priLin, 1)
End If
Next
abaEstoqueAux.UsedRange.Columns.AutoFit
resp = CInt(InputBox("Qual formato de relatório você quer? Prévia de Impressão/Impressão/PDF [1/2/3] - Digite o número correspondente"))
If resp = 1 Then
'1ª Opção: exibir a tela de prévia de impressão e imprimir por lá
ControleDaEmpresa.Hide
abaEstoqueAux.PrintPreview
Unload ControleDaEmpresa
ElseIf resp = 2 Then
'2ª Opção: imprimir direto com as configurações padrão
abaEstoqueAux.PrintOut
ElseIf resp = 3 Then
'3ª Opção: gerar um PDF
caminhoPDF = "C:UsersdamorOneDriveÁrea de TrabalhoRelatório de Estoque a Comprar.pdf"
abaEstoqueAux.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminhoPDF, OpenAfterPublish:=True
End If
Set abaEstoque = Nothing
Set abaEstoqueAux = Nothing
End Sub
Explicação do código acima (btRelatorioEstoque_Click):
Nessa aula você lidou com:
Hoje em Controle para Empresas Aula32 vamos finalizar a nossa série de controle com a impressão do relatório de compras!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a trigésima segunda aula (Controle para Empresas Aula32) da nossa Série de Controle para Empresas. Nessa aula nós vamos continuar com as sugestões de vocês!
Nessa aula vamos verificar como imprimir relatório de compras, então vamos adicionar um botão de impressão para que o usuário possa informar qual o tipo de impressão quer fazer.
A ideia é acrescentar a impressão desse relatório de compras no VBA para deixar tudo completo.
O mais interessante é que vamos imprimir relatório por datas no VBA, então você vai poder selecionar um período específico para tirar seu relatório e imprimir.
Além da impressão de relatório no VBA nós vamos fazer um tratamento de erro no VBA para ajustar um possível erro no código que temos na parte da mensagem de impressão.
Para isso vamos utilizar o On Error GoTo para evitar que o nosso código fique travado nessa parte.
Aba de Impressão
Será necessária a criação de uma aba a parte, de Impressão.
Ela será a aba auxiliar para levar as informações de Compras, Vendas ou Caixa, para a futura impressão.
Adicionaremos essa aba simplesmente clicando no ícone de “+” ao lado do nome das abas, no canto inferior do arquivo em Excel.
Botão de Impressão no Formulário
Será necessária a criação de um botão para disparar o código que criaremos a seguir, que vai gerar a impressão das abas Vendas, Compras ou Caixa.
Vamos aproveitar os botões já criados para copiar e fazer as devidas alterações. Veja o resultado:
Código para ativar o botão
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11. Assim poderemos de fato criar o nosso código a ser utilizado.
Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte. Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Mudaremos a sua propriedade name para “modImprimirRelatorioAba” e colocaremos a seguinte sub dentro dele, que será um objeto de estudo da aula de hoje:
Option Explicit
Sub imprimirRelatorioAba()
Dim aba As String
Dim dataIni As Date, dataFim As Date
Dim abaImpressao As Worksheet
Dim resp As Integer
Dim nomePDF As String, caminhoPDF As String
Set abaImpressao = ThisWorkbook.Worksheets("Impressao")
aba = LCase(InputBox("De qual aba você quer extrair o relatório? [Compras/Vendas/Caixa]"))
If aba <> "compras" And aba <> "vendas" And aba <> "caixa" Then Exit Sub
dataIni = CDate(InputBox("Digite a data de competência da primeira movimentação a ser analisada"))
dataFim = CDate(InputBox("Digite a data de competência da última movimentação a ser analisada"))
abaImpressao.UsedRange.Clear
If aba = "compras" Then
Dim abaCompras As Worksheet
Set abaCompras = ThisWorkbook.Worksheets("Compras")
abaCompras.UsedRange.AutoFilter 3, ">=" & CDbl(dataIni), xlAnd, "<=" & CDbl(dataFim)
abaCompras.Range("A1").CurrentRegion.Copy abaImpressao.Range("A1")
abaCompras.AutoFilterMode = False
abaImpressao.UsedRange.Columns.AutoFit
ElseIf aba = "vendas" Then
Dim abaVendas As Worksheet
Set abaVendas = ThisWorkbook.Worksheets("Vendas")
abaVendas.UsedRange.AutoFilter 3, ">=" & CDbl(dataIni), xlAnd, "<=" & CDbl(dataFim)
abaVendas.Range("A1").CurrentRegion.Copy abaImpressao.Range("A1")
abaVendas.AutoFilterMode = False
abaImpressao.UsedRange.Columns.AutoFit
Else
Dim abaCaixa As Worksheet
Set abaCaixa = ThisWorkbook.Worksheets("Caixa")
abaCaixa.UsedRange.AutoFilter 3, ">=" & CDbl(dataIni), xlAnd, "<=" & CDbl(dataFim)
abaCaixa.Range("A1").CurrentRegion.Copy abaImpressao.Range("A1")
abaCaixa.AutoFilterMode = False
abaImpressao.UsedRange.Columns.AutoFit
End If
On Error GoTo Fim
resp = CInt(InputBox("Qual formato de relatório você quer? Prévia de Impressão/Impressão/PDF [1/2/3] - Digite o número correspondente"))
If resp = 1 Then
'1ª Opção: exibir a tela de prévia de impressão e imprimir por lá
ControleDaEmpresa.Hide
abaImpressao.PrintPreview
Unload ControleDaEmpresa
ElseIf resp = 2 Then
'2ª Opção: imprimir direto com as configurações padrão
abaImpressao.PrintOut
ElseIf resp = 3 Then
'3ª Opção: gerar um PDF
nomePDF = Replace("Relatório de " & StrConv(aba, vbProperCase) & " - " & dataIni & " a " & dataFim & ".pdf", "/", "-")
caminhoPDF = "C:UsersdamorOneDriveÁrea de Trabalho" & nomePDF
abaImpressao.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminhoPDF, OpenAfterPublish:=True
End If
Fim:
End Sub
Explicação do código acima:
Acessando os códigos do formulário
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 controle da empresa.
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 ControleDaEmpresa > exibir código.
Macros a serem alteradas dentro do formulário:
Private Sub btImpressaoMenu_Click()
Call imprimirRelatorioAba
End Sub
Explicação do código acima:
Nessa aula (Controle para Empresas Aula32) você lidou com:
Hoje eu quero apresentar o Sistema de Controle para Empresas em VBA para você ter um controle completo na sua empresa!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, Impressionadores! Hoje queremos apresentar para você o Sistema de Controle para Empresas em VBA que construímos ao longo dessa série.
Foi uma série bem completa para construir do zero um formulário em VBA com tudo o que você precisa para fazer o controle da sua empresa.
Então você vai verificar a parte compras, vendas, estoque, caixa, DRE e até mesmo a parte de impressão dessas informações de forma automática.
Esse formulário para controle de empresas em VBA é uma excelente maneira de fazer esse controle principalmente para quem não tem conhecimento em Excel.
Pois ao usar o formulário em VBA você deixa todos os comandos e ações muito mais fáceis de utilizar, então o usuário final não vai ter problemas em utilizar esse sistema.
Agora bora pra aula que eu quero te mostrar esse controle completo para empresas em VBA!
Menu
Abaixo temos o nosso menu de botões, que vai acessar as “páginas” que preparamos, com funções específicas: Compras, Vendas, Estoque, Caixa, DRE.
De bônus temos um botão a parte para fazer a Impressão de algumas abas específicas: Compras, Vendas ou Caixa. Veja abaixo:
Compras
A página de compras vai nos proporcionar cadastrar e ter uma lista de produtos que pretendemos comprar ou de fato compramos de diversos fornecedores.
Nela teremos ID do produto, Data de Pagamento, Data de Competência, Fornecedor (nome), Produto (nome), Quantidade, Custo Total, Conta e Status.
Controlando as compras, saberemos as quantidades que já temos compradas, histórico, fornecedores mais frequentes, por exemplo.
Vendas
A página de vendas vai nos proporcionar cadastrar e ter uma lista de produtos que vendemos para diversos clientes.
Nela teremos ID do produto, Data de Pagamento, Data de Competência, Cliente (nome), Produto (nome), Quantidade, Valor de Venda, Conta, Status, Custo Unitário e Custo da Venda.
Controlando as vendas, saberemos as quantidades que já temos vendidas, histórico dessas operações, clientes mais frequentes, por exemplo.
Estoque
A página de estoque vai nos proporcionar o resumo entre as operações de compra e venda das páginas anteriores, onde cadastramos essas compras e vendas, respectivamente.
Nela teremos o resumo de cada produto individualmente: quantidade comprada, vendida, e o que ficou em estoque daquele produto específico após essas operações. Além disso, temos o estoque mínimo por produto.
Importantíssimo controle da empresa, para poder fazer futuras vendas, futuras compras e controlar o estoque perante os fornecedores e clientes. Suporta a decisão de quando comprar, se pode vender e a quantidade que pode vender.
Caixa
A página do caixa vai conter todas as movimentações feitas na nossa planilha/sistema. Todo registro de vendas e compras, além de algumas despesas do dia a dia da sua empresa.
Assim, tem em um local, tudo que aconteceu na sua empresa.
DRE
A página da DRE (Demonstração do Resultado de Exercício) vai conter um resumo-resultado contendo o que sua empresa gastou e recebeu proveniente das atividades da empresa.
Assim, representa um resultado final das operações da sua empresa.
Você tem a opção de fazer o levantamento do DRE por Ano, deixando o Mês em branco, ou preenchendo Ano e Mês.
Te dará, ao final do processo, o lucro/prejuízo líquido das atividades. Observe como é composto:
É isso mesmo que você está vendo! Estamos disponibilizando para os alunos de forma gratuita um sistema completo para fazer controle de sua empresa!
Poderá controlar facilmente suas compras, vendas, estoque, caixa e DRE!
Então é um sistema que fica muito fácil de utilizar, e já tem uma cara de sistema. Isso quer dizer que mesmo que você forneça o sistema para quem não sabe nada de Excel vai ser muito fácil e intuitivo de usar.
Até o próximo post, pessoal! Fique ligado no nosso canal do YouTube para mais conteúdo de Excel e VBA toda semana! Um abraço,
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.