Blog

Postado em em 18 de setembro de 2020

Formulário de Vendas no VBA

Ao longo das próximas publicações vamos aprender a construir um Formulário de Vendas no VBA 100% automático e personalizado!

Aulas Disponíveis

Aula 1 – Formulário de vendas

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

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

 

O que é?

Uma nova série onde aprenderemos montar um formulário de vendas dentro do Excel, através do VBA, que permite cadastrar essas vendas numa planilha.

Por que fazer um formulário de vendas no VBA?

Porque conseguimos cadastrar as informações através de uma visualização com interface amigável e que tem uma confiabilidade grande para realizar cadastramentos que se repetem.

Como construir um Formulário de Vendas no VBA?

Na verdade, teremos dois formulários: um para cadastrar uma venda, e outro para excluir uma venda cadastrada.

No exemplo do vídeo, temos uma empresa, esta empresa faz vendas de seus produtos em diversas lojas e essas lojas precisam ser registrados por meio de um formulário.

Esse formulário irá fazer o cadastramento na aba que concentra todas as informações de vendas (de todas as unidades), ele faz esse cadastramento por loja (por unidade) automaticamente, também.

Veja abaixo como é o formulário:

Formulário Excel VBA
Formulário Excel VBA

Ele será responsável por registrar as informações preenchidas na aba “Vendas”, e na loja respectiva da venda, chamada por um nome de cor.

Além disso, temos informações na aba de Opções que irão compor o formulário por meio de listas suspensas, para facilitar o cadastramento e evitar erros de preenchimento ao cadastrar.

Temos também a opção de formulário cuja finalidade é excluir um registro feito identificado pelo número de nota fiscal (NF).

Este formulário vai excluir o cadastro por cancelamento daquela venda ou por cadastramento equivocado, por exemplo. Veja abaixo como esse formulário:

Formulário VBA

Voltar para o índice

Aula 2 – Formulário no VBA

Nessa publicação vamos iniciar a construção do Formulário no VBA que vai servir como o nosso registro de vendas automático da planilha!

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

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

 

O que é um Formulário no VBA?

Para criar formulário Excel personalizado e automático do jeito que precisamos, vamos precisar utilizar o UserForm no VBA, que nada mais é do que a forma do VBA chamar os formulários.

Como fazemos para criar Formulário no Excel?

Vamos começar mais uma nova série de aulas de VBA no nosso blog, e esse post é dedicado à aula número 2 da nossa Série Formulário de Vendas no VBA! Ao longo das aulas dessa série vamos aprender todas as ferramentas para criar formulário no Excel.

Lembrando que esse formulário VBA será feito visando criar um registro de vendas.

Para criar o UserForm, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11, e iremos criar um novo formulário indo no menu superior em Inserir > UserForm.

Nesse momento se abrirá a tela dentro do ambiente do VBA o nosso UserForm, na forma de uma minicaixa vazia que tem escrito UserForm1 (por padrão). Essa visualização é, de fato, o nosso formulário na forma embrionária. Observe abaixo:

Criar Formulário Excel
Criar Formulário Excel

OBS: Repare que, toda vez que tocamos no formulário, a Caixa de ferramentas aparece como um pop-up (janela flutuante) para nos auxiliar. Ela que nos permitirá criar os objetos que iremos inserir no formulário. Caso você clique no formulário e a caixa de ferramentas não esteja “aberta”, basta ir em Exibir > Caixa de ferramentas.

Customização do 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) 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 “RegistroDeVendas”. Repare que o nome não pode ter caractere espaço (pode ser uma alternativa utilizar o “_”).

1) Primeiramente iremos mudar o título/cabeçalho do nosso formulário, que por padrão vem como “UserForm1”. Iremos clicar no formulário, procurar no menu de propriedades pela propriedade Caption.

Em seguida, dar duplo clique no que estiver na coluna da direita (das duas possíveis do menu de propriedades), apagar o que estiver escrito (normalmente UserForm1) e escrever o que queremos.

No caso, usaremos como Caption “Registro de Vendas”. Repare que aqui podemos escrever qualquer coisa, inclusive o caractere espaço.

2)  Para mudar a cor do nosso formulário, no menu de propriedades podemos procurar por “BackColor”, clicar na lista suspensa e escolher uma nova cor. Ao escolher, precisamos apenas clicar nela, e pronto.

3) Para criar objetos, usaremos a caixa de ferramentas. Vamos criar um “título” para o nosso formulário ao escolher “Label” na caixa de ferramentas. Iremos clicar dentro do nosso UserForm com o botão esquerdo do mouse, e redimensionar a “Label” de acordo com o tamanho que queremos.

Após isso, com a Label selecionada, podemos mudar:

– o que está escrito em: Caption

– o tamanho e estilo da letra em: Font

– a cor da fonte em: ForeColor

Observe o formulário após aplicar mudanças nas etapas anteriores:

Formulário VBA
Formulário VBA

Como faço para ver meu formulário no VBA?

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 no ícone de play (>) na parte superior do VBA ou pelo atalho do teclado F5. Dê uma olhada como fica no nosso exemplo:

Formulário Excel VBA
Formulário Excel VBA

Como vamos ver ao longo das aulas, o formulário Excel VBA que vamos criar pode ser personalizado de diversas formas e pode ter as mais variadas funcionalidades.

Voltar para o índice

Aula 3 – Caixa de Ferramentas no VBA

Na aula de hoje vamos ver como inserir Imagens, Caixas de Texto e Combinação através de exemplos com a caixa de ferramentas no VBA!

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

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

 

Como utilizar a Caixa de Ferramentas no VBA

Na terceira aula da nossa série vamos continuar a completar o nosso formulário inserindo algumas das ferramentas da nossa caixa de ferramentas! A primeira ferramenta que vamos inserir é uma imagem no formulário que você possua em seu computador!

Após isso, iremos associar a ferramenta de Rótulo (Label) com as outras: caixas de texto e combinação. Ela é utilizada para destacar textos dentro do formulário.

Depois dela, vamos mostrar como inserir uma caixa de texto no formulário para que os usuários consigam inserir dados em nosso UserForm.

Depois da caixa de texto, vamos ver como inserir uma caixa de combinação no formulário. Essa segunda caixa possui o mesmo objetivo da caixa de texto, a diferença é que a caixa de combinação dá algumas opções para que o usuário possa escolher.

Até aqui, fizemos as etapas de 0 a 3. No post de hoje, prosseguiremos com o aprendizado.

0) Mudar o nome do nosso UserForm (propriedades)

1) Mudar o título/cabeçalho do UserForm (o que está escrito na barra azul)

2)  Mudar a cor do nosso formulário (cor do fundo)

3) Criar um “título” para o nosso formulário através de uma “Label” (Registro de Vendas, em branco)

4) Imagem

A próxima etapa para chegar ao gabarito é colocar a logo (imagem) da Hashtag no canto superior direito do nosso formulário. Para isso precisamos clicar no nosso formulário, para que a caixa de ferramentas se abra, e, a partir dela, procuraremos pela última opção (miniatura de uma imagem).

Podemos Clicar dentro do Formulário e arrastar para redimensionar de acordo com que queremos. Em seguida, clicando na imagem, iremos procurar pela propriedade (no menu à esquerda, da parte inferior) “Picture”.

Por padrão, nela está escrito “(Nenhum)”, mas clicaremos nos 3 pontinhos, e abrirá como opção uma caixa do Windows Explorer para você localizar a imagem (em que pasta está) que você quer usar dentro do formulário.

Inicialmente, o VBA não entende o tamanho da imagem, e tenta colocar uma parte dela para caber no tamanho inicial do “retângulo”, e não fica da forma que queremos.

Então, para modificar isso, com a imagem clicada, precisamos ir à propriedade “PictureSizeMode”, iremos nos 3 pontinhos dela, e mudaremos o que está nessa propriedade para o final Zoom, e após/ou Stretch, conforme você ache melhor, como demonstramos no vídeo.

Para tirar a borda da imagem, e ela ficar perfeita no nosso formulário, iremos na propriedade de BorderStyle, e procurar pela opção com final “None”, e pronto. Teremos este resultado:

Formulário Excel VBA
Formulário Excel VBA
5) Caixa de texto

5.1) Agora vamos criar uma Label para ser um tipo de legenda para a inserção de dados, a nossa caixa de texto. Podíamos criar da mesma forma que fizemos na etapa 3, da aula anterior.

Mas nesse momento iremos optar por usar um artifício interessante do VBA: copiar outro já pronto! Isso mesmo, clicaremos na Label já pronta (Registro de Vendas), vamos copiar e colar dentro do formulário, e customizar.

No vídeo, fizemos as seguintes modificações no menu de propriedades:

Caption: mudar para “Data:”

Font: mudaremos tamanho da letra 14

5.2) Caixa de texto em si

A partir da caixa de ferramentas, criaremos o terceiro tipo de objeto, a caixa de texto.

Clicaremos nessa opção, e de forma análoga a criação das outras, clicaremos em seguida dentro do formulário, arrastando para dimensionar o tamanho de caixa de texto conforme queremos.

No vídeo, fizemos as seguintes modificações no menu de propriedades:

Font: mudar o tamanho da letra para 14, para encaixar melhor com o tamanho que criamos de caixa de texto

Criaremos outras caixas de texto, e legendas (Labels) a partir dessa criada, apenas copiando e colando.

6) Caixa de combinação

Precisaremos, em algumas opções de preenchimento de uma espécie de lista suspensa, com opções já prontas, com as lojas, IDs e os vendedores da loja, dados previamente cadastrados. Para isso, usaremos a caixa de combinação. Na caixa de ferramentas, optaremos pelo 4º objeto.

Iremos ver mais para frente como preencher essa caixa de combinação. Por enquanto iremos criar uma legenda (Label) para ela, ajeitar o tamanho da caixa de combinação, tamanho da fonte para 14 e alinhar nossa primeira linha do formulário. Após as 6 etapas, nosso formulário está assim:

Formulário VBA
Formulário VBA

Como vamos ver ao longo das aulas, o formulário Excel VBA que vamos criar pode ser personalizado de diversas formas e pode ter as mais variadas funcionalidades.

Na terceira aula dessa série mostramos como iniciar a construção do nosso Formulário no Excel utilizando imagem, caixa de texto e caixa de combinação no UserForm!

Voltar para o índice

Aula 4 – Formulário no Excel VBA: Finalizando a Construção

Ao longo das últimas publicações iniciamos a construção da parte visual do nosso Formulário no Excel VBA e nesse post vamos finaliza-lo!

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

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

 

Como finalizar o formulário no Excel VBA

Hoje iremos finalizar as formas (objetos) que compõem o visual do nosso formulário, aproveitando as formas que já criamos e estão prontas. Faremos as alterações necessárias de título, tamanho das caixas de entradas de informações, entre outras.

Observe abaixo como está montado parcialmente o formulário, até as aulas (e posts) anteriores da série de formulário de vendas no VBA:

Formulário VBA
Formulário VBA

Teremos a missão de finalizá-lo, com as seguintes etapas:

1) Vendedor: criar label e caixa de combinação

Iremos simplesmente copiar duas formas já prontas, feitas anteriormente para “Loja”. Com o CTRL pressionado iremos selecionar com botão esquerdo do mouse a label “Loja”, e a caixa de seleção logo ao lado direito dela, onde teremos as duas selecionadas.

Em seguida, usaremos o famoso CTRL+C, clicaremos com botão esquerdo do mouse em outro local do formulário, e CTRL+V.

Após isso, precisaremos redimensionar a caixa de combinação, que desejamos que seja grande, para caber o nome inteiro do vendedor, e trocar a propriedade Caption da label para “Vendedor:” (e redimensioná-la). Até aqui, ficaríamos com esse formulário:

Criar Formulário Excel
Criar Formulário Excel

2) ID: criar label e caixa de combinação

Faremos o mesmo procedimento com a label e a caixa de combinação que usamos na etapa 1 desse post para criar os campos para ID.

3 e 4) Quantidade e Preço: criar label e caixa de texto

Para criar a label e a caixa de texto da “Quantidade”, iremos utilizar passos parecidos com as etapas 1 e 2, mas iremos copiar as formas prontas de “NF” ou de “Data”, tanto a label quanto a caixa de texto. Repetiremos esses passos duas vezes, mudaremos os locais conforme queremos, redimensionaremos e mudaremos o “Caption” (“Quantidade:” e “Preço:”).

5 e 6) Inserir botão de OK e X

Para inserir os botões de OK (cadastrar) e X (cancelar), iremos realizar os mesmos passos. Vamos abrir a caixa de ferramentas, pelo menu, ou apenas clicando no formulário. Em seguida, iremos optar pela segunda forma da segunda linha (botão de comando).

Clicaremos nessa opção, e, assim como no vídeo, clicaremos no formulário para criá-lo e redimensionaremos para o tamanho que quisermos. No vídeo, fizemos essas mudanças nas propriedades:

Height: 50

Width: 50

Caption: OK

Font: Tahoma, Negrito, 24

BackColor: Paleta > Escolher uma cor verde

Para criarmos o botão “X”, simplesmente copiamos o botão de “OK” pronto, e mudamos a cor para vermelho e o Caption para “X”.

Veja as mudanças após as etapas 2 a 6:

Criar Formulário No Excel
Criar Formulário No Excel

Como faço para ver meu formulário pronto?

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 no ícone de play (>) na parte superior do VBA ou pelo atalho do teclado F5.

Até aqui finalizamos as formas que compõem o visual do nosso formulário de vendas. Em seguida aprenderemos os códigos para que ele funcione integrado ao Excel para fazer as funções que desejamos. Fique ligado para mais conteúdo de VBA e Excel!

Voltar para o índice

Aula 5 – VBA Close Form (Fechar Formulário no VBA) – Dicas Rápidas

No post de hoje vamos começar a construir a inteligência por trás do nosso formulário e a primeira etapa é o close form VBA.

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

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

VBA Close Form – Como Funciona?

Nessa aula vamos começar a construir a inteligência que fica por trás do nosso formulário de vendas no VBA! Na primeira parte da aula, vou te mostrar como fechar formulário no VBA, criando um código que vamos associar ao botão X. Na segunda iremos entender como funciona a lista de opção.

Precisamos associar botão e lista de opção no formulário (caixa de seleção) às funções ou ações específicas que queremos que sejam disparadoras de nossos códigos.

A seguir, apresentaremos parcialmente os objetos e as funções, e em seguida os códigos que utilizaremos para atrelar a função a esse objeto, para que ele fique inteligente e faça o que queremos. Observe como está nosso formulário:

vba close form
Formulário Excel VBA

Botão X: Fechar o formulário

Para inserir um código no botão X, devemos, com o VBA aberto (Alt(+Fn)+F11), abrir nosso formulário, e dar um duplo clique no botão X. A partir daí, poderemos atribuir uma função de clique (por padrão), que irá disparar um código (no caso para o nosso botão X).

Para o botão X, iremos inserir o seguinte código:

Private Sub CommandButton2_Click()
Unload RegistroDeVendas
End Sub

Explicação:
Toda vez que alguém clicar no botão X, o nosso código irá descarregar o nosso formulário, denominado de RegistroDeVendas.

OBS: Vamos renomear as caixas de texto e de combinação para facilitar como vamos escrever o código. Vamos dar o nome das caixas respectivas como “caixa_exemplo”, sendo exemplo cada tipo de objeto (ID, data, NF, Loja, Vendedor, Quantidade e Preço).

Carregar opções de loja ao iniciar o formulário

Para podermos ter as caixas de combinação carregadas com as informações, precisamos dar o comando para que quando iniciarmos o formulário, ele carregue automaticamente as fontes de dados dessas caixas.

Para isso, precisamos passar o comando de ação de inicialização do formulário, para que ele dispare o código.

Para isso, precisamos ir no objeto RegistroDeVendas, apertar com botão direito e ir em Exibir código. Em seguida iremos selecionar, no menu superior ao código, à esquerda UserForm e na direita, Initialize. Observe abaixo:

vba close form
Lista De Opção No VBA

Automaticamente ele irá abrir um “Private Sub UserForm_Initialize()” para escrevermos algum código, que irá ser disparado quando abrirmos (iniciarmos) o formulário. Observe abaixo o código que iremos inserir:

Private Sub UserForm_Initialize()
ultima_linha = Sheets("Opções").Range("B1").End(xlDown).Row
caixa_loja.RowSource = "Opções!B2:B" & ultima_linha
End Sub

Explicação:

Como bem explicado no vídeo, precisamos saber qual a quantidade atualizada de lojas iremos carregar, toda vez que o formulário for aberto.

Para isso, precisamos descobrir a última linha da coluna de lojas, para pegar as informações da primeira linha até a última linha. Assim, garantimos que a lista estará sempre atualizada, mesmo que entre alguma loja nova nessa listagem.

Para isso, precisamos armazenar na variável “ultima_linha” a informação que nos dará o número correspondente à última linha.

Com isso, ao iniciar o formulário, a “caixa_lojavai ter sua fonte de informações (RowSource) atualizada da célula B2 até a última célula da coluna B, que corresponde à última loja, da aba Opções. Com isso, garantimos a lista atualizada sempre.

Portanto, vimos até aqui como fechar o nosso formulário atrelando uma ação ao nosso botão X, e vimos como fazer uma lista de opção no VBA automática. Vamos utilizar essas listas de opções para facilitar o preenchimento das lojas, vendedores e IDs no formulário nos próximos posts. Fique ligado no blog e no nosso canal do Youtube para mais conteúdo!

Voltar para o índice

Aula 6 – Botão de Macro: Como criar e Configurar no Excel

Nesse post vamos continuar a construção do nosso formulário e, para fazer isso, vamos inserir um botão de macro na planilha e criar listas de opção!

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

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

 

Como abrir o formulário por um botão de macro na planilha?

Nessa aula (6ª) da série Formulário de Vendas no VBA iremos aprender como preencher as listas de opção que compõem o nosso formulário, a de Vendedor e de ID, e também como vincular o nosso formulário a um botão, para fazer com que o nosso formulário seja exibido na nossa planilha em Excel.

O nosso formulário está feito até um certo ponto, onde elaboramos diversas etapas anteriores e a última versão dele se encontra no nosso último post (feito) da série.

1) Botão de Macro para abrir o nosso formulário no Excel

Precisamos de um botão que será nosso ativador ou abridor do nosso formulário.

Para isso, iremos na nossa planilha na guia Inserir > Ilustrações > Formas > Retângulo: Cantos Arredondados (2º ícone da categoria de Retângulos). A partir dessa escolha, redimensione a ilustração conforme o seu gosto, e pronto.

Após isso, vamos personalizar o botão. Para isso, iremos dar um clique com o botão esquerdo do mouse nele, e escreveremos o que desejamos nele.

No nosso exemplo, escrevemos “Registrar Venda”, fomos na guia Página Inicial, e botamos o alinhamento no meio e centralizamos o texto, além de colocar em negrito.

Para finalizar, iremos colocar um sombreamento, indo em Formato de Forma > Efeitos de Forma > Predefinição > Predefinições > Predefinição 2.

Em seguida iremos atribuir a função de abrir o formulário. Para que o botão possa fazer isso, devemos criar um código novo que conterá uma instrução específica. Iremos abrir o VBA (Alt(+Fn)+F11), e optaremos por Inserir > Módulo. A partir daí iremos colocar o seguinte código:

Sub mostrar_formulario()

RegistroDeVendas.Show

End Sub

Esse código fará com que o formulário de nome “RegistroDeVendas” (o nosso formulário em questão) seja mostrado (show, em inglês), apenas. Após isso, iremos atrelar essa sub criada ao nosso botão, para que toda vez que cliquemos nele, esse código seja ativado, e, consequentemente abra o nosso formulário.

Para atrelar o código ao nosso botão, iremos voltar para a planilha em Excel, clicaremos com o botão direito do mouse no botão, iremos em atribuir macro e procuraremos pela nossa macro (mostrar_formulario).

Em seguida, clicaremos nela e em OK. Pronto. Agora basta clicar com o botão esquerdo do mouse no botão, que o formulário se abrirá.

2) Lista de Opção de Vendedor

O passo a passo para fazer o código necessário para habilitar a nossa lista de opção automática ao abrir o formulário será o mesmo seguido para fazer a lista de opção para Lojas, feito no post da aula anterior, que você pode conferir também.

OBS: Apenas lembrando que esse código deve estar dentro do código do formulário (acessamos esse código indo com botão direito no formulário > exibir código).

A seguir temos as linhas do código que iremos utilizar nesse passo 2:

ultima_linha = Sheets("Opções").Range("A1").End(xlDown).Row
caixa_vendedor.RowSource = "Opções!A2:A" & ultima_linha

Explicação do código acima:

Nós atribuímos à variável “ultima_linha” a linha que irá ser correspondente à última linha da coluna A da aba Opções, que será usada posteriormente para preencher a fonte de dados para a “caixa_vendedor”.
A fonte de dados da “caixa_vendedor” irá receber todo conteúdo da coluna A da aba Opções, ou seja, os nomes dos vendedores escritos da célula A2 até a última linha célula dá coluna A (linha dada pela variável ultima_linha).

Como essa última linha será atualizada assim que o formulário for aberto, caso entre algum novo vendedor, ele será incluído automaticamente.

3) Lista de Opção de ID

Como dito anteriormente, os passos para criar essa lista de opção serão os mesmos do último post e do passo 2 desse post. A seguir temos as linhas do código necessárias para realizar esse passo 3:

ultima_linha = Sheets("Opções").Range("D1").End(xlDown).Row
caixa_id.RowSource = "Opções!D2:D" & ultima_linha

Explicação do código acima:

Nós atribuímos à variável “ultima_linha” a linha que irá ser correspondente à última linha da coluna D da aba Opções, que será usada posteriormente para preencher a fonte de dados para a “caixa_id”.

OBS: Não tem problema essa variável ter o mesmo nome da outra utilizada no código do passo 2 do post, porque ao executar essa linha de código, ela será atualizada com um novo valor, e aquele antigo (que serviu para preencher a caixa de vendedores) será substituído por um novo, que será fundamental para preencher a caixa de Ids.

A fonte de dados da “caixa_id” irá receber todo conteúdo da coluna D da aba Opções, ou seja, os nomes dos vendedores escritos da célula D2 até a última linha célula dá coluna D (linha dada pela variável ultima_linha).

Como essa última linha será atualizada assim que o formulário for aberto, caso entre algum novo ID, ele será incluído automaticamente.

Na sexta aula dessa nossa série, aprendemos como abrir nosso formulário diretamente pelo Excel, sem precisar acessar o VBA. Para isso, vamos precisar de um botão na planilha que, toda vez que for clicado, abre o nosso formulário.

Aprendemos a construir esse botão de macro na planilha para tornar mais intuitiva a abertura do formulário.

Além disso, aprendemos como preencher a lista de opção no formulário para os vendedores, assim como a lista de opção no VBA que utilizamos para os IDs de produtos.

É isso pessoal, ficaremos por aqui, não deixe de acompanhar nosso blog e de conferir nosso canal do YouTube para mais informações, conteúdo e vídeos de Power BI! Um abraço e até a próxima!

Voltar para o índice

Aula 7 – Evento Change no Formulário (Explicação e Aplicação)

Nessa publicação vamos te mostrar uma aplicação bem interessante do Evento Change no Formulário para atualizações dos preços!

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

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

 

Como usar o Evento Change no Formulário?

Nessa aula (7ª) iremos aprender como uma informação numa caixa de texto, a partir de outra informação já conhecida.

O nosso formulário está feito até um certo ponto, onde elaboramos diversas etapas anteriores e a última versão dele que está na última aula.

Hoje vamos falar um pouco mais sobre os eventos no VBA. O foco da aula vai ser no Evento Change no VBA.

Esse evento é utilizado toda vez que queremos executar uma macro assim que algo mude, isto é, esse evento é desencadeado a partir da mudança de uma célula, um intervalo, um objeto, uma planilha ou qualquer outra coisa.

Em nosso exemplo, vamos utilizar o Evento Change para atualizar o preço toda vez que alterarmos o ID do produto. Mas como fazemos isso?

Para isso funcionar, precisamos dedicar uma parte do código do nosso formulário para esse evento específico. Mais uma vez lembrando que, para abrir o código do nosso formulário, e acessamos esse código ao abrir o VBA (Alt(+Fn)+F11), e depois indo com botão direito no formulário > exibir código.

Escreveremos o seguinte código ao abrir o ambiente de código do nosso Formulário de Vendas:

Private Sub caixa_id_Change()
num_id = caixa_id.Value
caixa_preco.Value = Sheets("Opções").Columns("D:D").Find(num_id).Offset(0, 1).Value
End Sub

Explicação do código:

Primeiramente estamos declarando uma macro privada (Private Sub) de nome “caixa_id_Change”, ou seja, uma macro que será executada exclusivamente dentro do código do nosso formulário e não pode ser relacionada com outro módulo ou formulário dentro do VBA.

A segunda linha diz respeito ao fato de a variável “num_id” receber o conteúdo que estiver selecionado na “caixa_id”. E quando fizermos essa mudança na caixa ID, disparará nossa macro.

A terceira linha irá fazer com que a “caixa_precoreceba o valor da célula imediatamente ao lado direito (1 coluna pra direita), na mesma linha (0 linhas de diferença) (compondo o Offset(0,1)), do valor da variável “num_id” correspondente selecionado pela “caixa_id” na segunda linha.

A quarta linha irá encerrar o nosso código.

Assim buscaremos o preço atualizado de acordo com o ID selecionado na Caixa de IDs, qualquer que seja o ID selecionado no formulário.

OBS: Como mostrado no vídeo, você pode criar essa sub Change diretamente dando duplo clique no objeto de lista de opção (caixa_id) do nosso formulário.

Eventos VBA são muito úteis para realizar ações de forma automática. Existem vários tipos de eventos e cada um deles pode ser utilizado em um tipo de situação específica. Nesse post aprendemos como combinar o evento change no VBA com uma lista de opções automática.

Toda semana tem conteúdo novo no nosso canal do YouTube! Fique ligado para mais vídeos de Power BI e aqui no blog para mais posts! Até o próximo!

Voltar para o índice

Aula 8 – Primeira Linha Vazia no VBA

No post de hoje vamos ver como encontrar a primeira linha vazia no VBA e também como preencher essa linha em uma tabela no Excel.

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

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

 

Como cadastrar uma venda na primeira linha vazia?

Na oitava aula da série vamos entrar no código necessário para cadastrar na primeira linha vazia da nossa tabela, visando cadastrar uma nova venda. O passo a passo vai ser bem simples e intuitivo, até porque a parte de descobrir a primeira linha vazia no VBA a gente já viu nas aulas anteriores.

Para descobrir a primeira linha vazia, precisamos primeiro entender que queremos que essa linha seja descoberta quando clicarmos no botão de “OK” do nosso formulário de vendas, para que cadastremos uma nova venda na nossa planilha.

Com essa informação a ser considerada, iremos abrir o ambiente do VBA, com Alt(+Fn)+F11, localizar o UserForm que representa o nosso formulário, o RegistroDeVendas, e dar um duplo clique no nosso botão “OK” (em verde).

Assim se abrirá o código respectivo ao clique desse botão, que será a ação que queremos para disparar o nosso código para registrar a venda.

Para registrar a venda, precisamos descobrir qual é a primeira linha vazia do registro. Observe o código abaixo:

Private Sub CommandButton1_Click()
linha = Sheets("Vendas").Range("A1048576").End(xlUp).Row + 1
Sheets("Vendas").Cells(linha, 1).Value = caixa_data.Value
Sheets("Vendas").Cells(linha, 2).Value = caixa_nf.Value
Sheets("Vendas").Cells(linha, 3).Value = caixa_vendedor.Value
Sheets("Vendas").Cells(linha, 4).Value = caixa_loja.Value
Sheets("Vendas").Cells(linha, 5).Value = caixa_id.Value
Sheets("Vendas").Cells(linha, 6).Value = caixa_quantidade.Value
Sheets("Vendas").Cells(linha, 7).Value = caixa_preco.Value
Sheets("Vendas").Cells(linha, 8).Value = caixa_quantidade.Value * caixa_preco.Value
End Sub

Explicação do código:

Ao clicar no nosso botão de “OK”, vamos a partir da última célula da coluna A, buscar a última célula preenchida.

A partir dela, queremos saber qual a linha respectiva dessa célula, e acrescentar uma unidade, porque queremos saber o número da linha não preenchida, ou seja, a primeira vazia, sendo a linha abaixo da última preenchida.

Iremos armazenar essa informação na variável “linha”. Com isso, poderemos registrar nossa venda.

A partir daí, registraremos nas células da aba “Vendas”, na linha dada pela variável “linha”:

– Na primeira coluna, o valor dado que estará escrito na “caixa_data

– Na segunda coluna, o valor dado que estará escrito na “caixa_nf

– Na terceira coluna, o valor dado que estará escrito na “caixa_vendedor

– Na quarta coluna, o valor dado que estará escrito na “caixa_loja

– Na quinta coluna, o valor dado que estará escrito na “caixa_id

– Na sexta coluna, o valor dado que estará escrito na “caixa_quantidade

– Na sétima coluna, o valor dado que estará escrito na “caixa_preco

– Na oitava coluna, o valor dado que será dado pela multiplicação dos valores escritos em caixa_quantidade * caixa_preco

Por fim, se encerra a nossa sub.

Vimos nesse post que para descobrir qual é a primeira linha vazia e, consequentemente, a linha a ser utilizada para o preenchimento, precisamos primeiro ir até a última linha preenchida no Excel.

Então, a partir dela, descemos uma linha e a achamos. Esse foi exatamente o passo a passo que utilizamos para conseguir fazer esse registro com o nosso formulário.

Voltar para o índice

Aula 9 – Método Sheets no VBA: Trabalhando com Abas

Nessa publicação vou te mostrar como alterar, modificar, selecionar e trabalhar com abas no Excel utilizando o Método Sheets no VBA.

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

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

 

Como utilizar o Método Sheets no VBA?

Hoje vamos para a nona aula da nossa Série Formulário de Vendas, onde vamos aprender a trabalhar com abas no VBA para cadastrar nossas vendas não só na aba principal, mas também em outra abas específicas da planilha.

Para selecionarmos, editarmos ou até criarmos abas no VBA vamos precisar utilizar o Método Sheets no VBA.

Esse método é a forma que temos para trabalhar com as abas de uma planilha no Excel. Toda vez que precisarmos indicar ao VBA que estamos nos referindo a uma certa aba, vamos precisar utilizar o Sheets ou o WorkSheets.

No exemplo do vídeo, temos diversas lojas da nossa empresa, representadas pelas abas e queremos, ao cadastrar uma nova venda, que, além de cadastrar a venda na aba “Vendas”, ela também seja registrada na aba de dados de vendas da respectiva loja que realizou a venda.

Ao cadastrar uma venda, nós teremos a loja selecionada na “caixa_loja”, e será esse valor que iremos usar para saber em qual aba devemos registrar a venda.

Iremos armazenar na variável “loja” esse texto, que será exatamente igual ao nome da aba da loja respectiva. Com essa informação, e usando o método Sheets, podemos atrelar a variável loja para dizer em que aba vamos mexer pelo VBA. Com isso, acessamos a aba escolhida pela “caixa_loja”.

A partir daí, vamos repetir o mesmo procedimento e código que foi usado para cadastrar a venda na aba Vendas.

Só que agora teremos que substituir a aba de “Vendas” pela variável “loja”. E o processo será praticamente o mesmo, descobriremos a primeira linha vazia da aba da respectiva loja, e cadastraremos os valores respectivos de Data, Nota Fiscal, Vendedor, Loja, ID, Quantidade, Preço e Valor Total.

Após realizar esse cadastro, iremos zerar os valores das caixas presentes no nosso formulário, ou seja, atribuiremos “vazio” aos valores de cada caixa, para que o formulário seja limpo e que o usuário possa cadastrar uma outra venda, caso queira.

Observe o código abaixo completo:

Private Sub CommandButton1_Click()

linha = Sheets("Vendas").Range("A1048576").End(xlUp).Row + 1

Sheets("Vendas").Cells(linha, 1).Value = CDate(caixa_data.Value)
Sheets("Vendas").Cells(linha, 2).Value = caixa_nf.Value
Sheets("Vendas").Cells(linha, 3).Value = caixa_vendedor.Value
Sheets("Vendas").Cells(linha, 4).Value = caixa_loja.Value
Sheets("Vendas").Cells(linha, 5).Value = caixa_id.Value
Sheets("Vendas").Cells(linha, 6).Value = caixa_quantidade.Value
Sheets("Vendas").Cells(linha, 7).Value = caixa_preco.Value
Sheets("Vendas").Cells(linha, 8).Value = caixa_quantidade.Value * caixa_preco.Value


loja = caixa_loja.Value

linha = Sheets(loja).Range("A1048576").End(xlUp).Row + 1

Sheets(loja).Cells(linha, 1).Value = CDate(caixa_data.Value)
Sheets(loja).Cells(linha, 2).Value = caixa_nf.Value
Sheets(loja).Cells(linha, 3).Value = caixa_vendedor.Value
Sheets(loja).Cells(linha, 4).Value = caixa_loja.Value
Sheets(loja).Cells(linha, 5).Value = caixa_id.Value
Sheets(loja).Cells(linha, 6).Value = caixa_quantidade.Value
Sheets(loja).Cells(linha, 7).Value = caixa_preco.Value
Sheets(loja).Cells(linha, 8).Value = caixa_quantidade.Value * caixa_preco.Value


caixa_data.Value = ""
caixa_nf.Value = ""
caixa_vendedor.Value = ""
caixa_loja.Value = ""
caixa_id.Value = ""
caixa_quantidade.Value = ""
caixa_preco.Value = ""


ActiveWorkbook.Worksheets("Vendas").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Vendas").Sort.SortFields.Add2 Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Vendas").Sort
.SetRange Range("A:H")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With


ActiveWorkbook.Worksheets(loja).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(loja).Sort.SortFields.Add2 Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets(loja).Sort
.SetRange Range("A:H")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With


End Sub

Além de fazer esse registro na aba de Vendas e na aba da Loja que fez a venda e descarregar as informações do formulário, nós queremos classificar os dados de registro de acordo com a data. Nós iremos gravar uma macro específica que irá nos auxiliar (no vídeo mostramos como fazer essa gravação e acessar essa macro).

Ela escreverá o código de selecionar os dados das colunas de dados da nossa aba de Vendas, e da nossa aba da Loja, e classifique do mais antigo para o mais novo. Adicionaremos esse código ao final do nosso registro, para que essa classificação seja feita após o registro da venda.

Iremos classificar os dados do mais antigo para o mais novo (em relação à data de registro) das colunas A até a coluna H da aba de Vendas e da aba da loja de interesse, e pronto, terminamos nossa macro.

OBS: Adicionamos a função CDate ao valor registrado nas abas a partir da “caixa_data”, porque inicialmente ele seria um texto, e ao tentar classificar, iria ser ruim porque a nossa classificação não iria sair da forma ideal.

Para solucionar essa questão, conseguimos converter o texto que vem da caixa_data para uma data com a função CDate, e fazemos com que todas as informações da coluna A das abas sejam datas, e a classificação funcione corretamente.

Então repare que essa função foi adicionada ao nosso código e pontuada no vídeo.

Vimos que, quando estivermos trabalhando com abas e utilizando o Sheets VBA, precisamos fazer o mesmo passo a passo que fizemos no registro de informações para a aba principal (de Vendas).

Voltar para o índice

Aula 10 – Excluir Linha no VBA com um Formulário (UserForm)

No post de hoje vou te ensinar a criar um formulário que consegue excluir linha no VBA para uma determinada condição digitada pelo usuário.

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

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

 

Como excluir linha no VBA?

Fala pessoal! Hoje estamos na décima aula da série e nela vamos aprender a criar uma macro para excluir linha. Essa macro será utilizada em nosso segundo formulário VBA da série, o formulário de exclusão.

Por que vamos fazer um formulário para excluir linha no VBA?

Basicamente porque se temos cadastramento de vendas (outro formulário), precisamos de um que faça uma exclusão de algum pedido que vá ser alterado, ou foi cadastrado de forma errada e precisa ser apagado do compilado de vendas da empresa.

Ele vai funcionar de forma muito simples: você escolhe uma determinada NF (identificadora do pedido) e a função dele é apagar linhas no VBA em todas as ocorrências dessa NF na planilha, ou seja, tanto na aba resumo como nas abas específicas de cada loja a nossa macro vai apagar as linhas nas quais ela encontrar a NF em questão.

Garantiremos, assim, que o pedido cadastrado para aquela NF não faz parte mais do nosso banco de dados, e podemos fazer um novo pedido para aquela NF, se quisermos. Observe abaixo os passos para começar a criar esse formulário:

1) Duplicar formulário já pronto

Precisamos copiar ou duplicar, para já aproveitar os tamanhos, objetos e cores criados no Formulário de Registro de Vendas das aulas anteriores.

Para isso, precisamos, com o VBA aberto (Alt(+Fn)+F11), renomear nosso formulário (de RegistroDeVendas para RegistroDeVendas2), clicar com o botão direito no nosso formulário RegistroDeVendas2, optar por exportar arquivo, salve ele numa pasta (extensão .frm).

Vamos voltar o nosso primeiro formulário ao nome original (RegistroDeVendas), e em seguida, vamos importá-lo para o Excel (ele será importado como RegistroVendas2, como foi exportado, para não termos um mesmo nome do que está no VBA do que vamos importar).

2) Modificar o visual do Formulário para Excluir Linha no VBA

Com o nosso RegistroDeVendas2 importado, vamos começar a modificar o que achamos necessário. Começamos por apagar o código que ele carregou do formulário original, indo em Exibir código, selecionando todo texto e dando um Delete.

Em seguida, iremos modificar o nome desse formulário, mudando a propriedade Name de RegistroDeVendas2 para ExclusaoDeVendas.

Na propriedade Caption do formulário, mudaremos para Exclusão de Vendas, para que ele represente o cabeçalho do nosso formulário.

Mudaremos a label que fica em destaque de Registro de Vendas para Exclusão de Vendas. Redimensionaremos o tamanho do objeto conforme necessário.

Vamos deletar quase todas as caixas/objetos selecionando e dando Delete/. Deixaremos apenas uma Label com “Digite uma NF:” e deixaremos uma caixa de texto também, além dos nossos botões de OK e X.

3) Criando botão e código associado para abrir o Formulário de Exclusão de Vendas

Primeiramente precisamos criar um código, dentro de um módulo do VBA para que faça o nosso formulário ser aberto. Iremos criar uma sub “mostrar_formulario_exclusao()” que vai basicamente abrir/mostrar nosso formulário de ExclusaoDeVendas. Observe:

Sub mostrar_formulario_exclusao()
ExclusaoDeVendas.Show

End Sub

Esse código que será associado ao nosso botão, para que, quando a gente clicar nele, automaticamente o nosso formulário de Exclusão de Vendas seja aberto. Como fazer?

Criaremos um novo botão, ou copiaremos o já pronto para o de Formulário de Vendas, daremos um título para diferenciá-lo, e clicaremos com o botão direito do mouse no nosso botão.

Em seguida escolheremos “atribuir macro…” com o botão esquerdo do mouse. Abrirá uma caixinha e selecionaremos a macro “mostrar_formulario_exclusao”, e daremos OK.

Pronto, nosso botão já está associado à nossa macro para abrir o Formulário.

4) Atribuindo função ao botão X

Vamos agora atribuir uma função ao botão X, indo no nosso formulário com duplo clique de botão esquerdo (dentro do VBA), e dando duplo clique em seguida no botão X. A partir daí inseriremos o seguinte código:

Private Sub CommandButton2_Click()
Unload ExclusaoDeVendas
End Sub

Esse código diz para nós apenas que quando clicarmos no botão X do nosso formulário, no Excel, o formulário será descarregado (fechará).

Até aqui construímos o nosso segundo formulário, atribuímos ele a um botão de abertura e demos função a um botão dele. Na próxima aula avançaremos nesse formulário. Fique ligado para aprender mais e continuar esse formulário com a gente!

Voltar para o índice

Aula 11 – VBA If Else: Criando Comparações com a Estrutura If

Vou te mostrar nesse post como podemos criar comparações através de códigos utilizando a estrutura VBA If Else e suas variações.

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

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

 

Como usamos comparações com If no nosso Formulário VBA para Exclusão de Vendas?

Chegamos hoje à nossa décima primeira aula da Série Formulário De Vendas No VBA, onde teremos que lidar com a situação de comparação da NF inserida no nosso Formulário de Exclusão para realizarmos a exclusão dos Registros principal, e da aba da loja que realizou a venda.

Para isso, vamos mostrar como criar condições no VBA utilizando a Instrução If.

Como estamos querendo excluir linhas da nossa tabela com base em uma condição (que a NF da linha analisada seja igual à NF digitada no formulário), vamos precisar inserir essa comparação dentro do VBA.

Vamos ter que inserir esse código de comparação ao clicar no nosso botão de OK porque queremos, após inserir uma NF, verificar se no registro ela já existe, e excluí-la.

Então precisamos que o botão de OK dispare nossa procura e nossa exclusão. Para isso, abriremos o VBA (Alt(+Fn)+F11), iremos com duplo clique de botão esquerdo no nosso formulário ExclusaoDeVendas, e duplo clique no nosso botão OK (verde).

Observe abaixo o código que será incluído no clique do nosso botão de OK do formulário:

Private Sub CommandButton1_Click()
valor_nf = caixa_nf.Value + 0
If Cells(2, 2).Value = valor_nf Then
       Range(Cells(2, 1), Cells(2, 8)).Delete shift:=xlUp
End If
End Sub

Explicação do código:

Essa sub é uma sub privada porque pertence somente ao formulário e só pode ser chamada/usada dentro dele. Atribuiremos à variável “valor_nf” o valor que vamos inserir na “caixa_nf”.

OBS: Observe que colocamos um +0 nessa linha de código, porque fazendo isso, o VBA irá converter isso para um número, porque por padrão ele entende o que vem da caixa_nf como um texto, porque ela é uma caixa de texto.

Em seguida, partiremos para a nossa comparação com condição.

Nós queremos: se o valor da célula B2 (linha 2, coluna 2) for igual ao valor da variável “valor_nf”, queremos que o VBA faça a exclusão do intervalo que vai da coluna 1 até a coluna 8, da linha 2.

O “shift:=xlUp” significa que ele irá fazer com que os dados debaixo desse intervalo excluído subam para preencher o “vazio” que ficará ao excluir esse “intervalo” de dados preenchidos, que corresponde a uma “linha” da nossa tabela. Após isso, mais nada será feito e termina a nossa ação pela comparação.

E assim encerra a nossa macro. Ela só vai fazer essa exclusão se o valor inicial de comparação for verdadeiro. Caso contrário, ela não entrará nessa estrutura de comparação, e não fará nenhuma ação.

O vba If Else é bem simples de usar e a sua estrutura é muito parecida com a fórmula SE do Excel. Primeiramente, precisamos informar qual é a comparação/condição que estamos realizando e depois informamos qual/quais ações devem ser realizadas caso a comparação/condição seja verdadeira.

Hoje introduzimos a comparação que será responsável pela verificação da existência da NF específica que queremos excluir em toda a planilha. Fique ligado nas próximas aulas para aprendermos mais conteúdos e fechar nosso formulário de exclusão!

Até a próxima!

Voltar para o índice

Aula 12 – Como Utilizar a Estrutura de Repetição For no VBA

Nessa publicação vamos ver como utilizar estruturas de repetição e, para isso, vamos focar em exemplos e aplicações da estrutura For VBA!

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

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

Como usar a Estrutura de Repetição For VBA para excluir registros de venda

Nessa nossa décima segunda aula, mais especificamente falando do segundo formulário, o de exclusão de vendas, iremos aprender como usar a estrutura de repetição for para fazermos comparações com as linhas da nossa aba de interesse para fazer diversas comparações e possíveis diversas exclusões nessa aba.

Na aula passada, vimos como fazer essas comparações através da estrutura If. Observe abaixo a estrutura do nosso código, que será o código disparado quando apertamos o nosso botão OK (verde) do formulário:

Private Sub CommandButton1_Click()

valor_nf = caixa_nf.Value + 0

ult_linha = Range("A1048576").End(xlUp).Row

For linha = 2 To ult_linha

    If Cells(linha, 2).Value = valor_nf Then

        Range(Cells(linha, 1), Cells(linha, 8)).Delete shift:=xlUp
        linha = linha - 1

    End If

Next

End Sub

Explicação do código acima:

Atribuiremos à variável “valor_nf” o valor que vamos inserir na “caixa_nf”. Ela conterá o valor da nossa NF a ser excluída e será nosso parâmetro de comparação.

OBS: Observe que colocamos um +0 nessa linha de código, porque fazendo isso, o VBA irá converter isso para um número, porque por padrão ele entende o que vem da caixa_nf como um texto, porque ela é uma caixa de texto.

Descobriremos qual é a última linha dessa aba indo na última célula da coluna A, a A1048576, iremos dar um Ctrl seta para cima, e chegaremos à última linha preenchida. Esse valor será atribuído à variável “ult_linha” e será usado em seguida.

Em seguida, partiremos para a nossa estrutura de repetição com uma condição dentro dela.

Iremos andar da linha 2 até a última linha da aba, que será dada pela variável “ult_linha”. Isso significa que ele repetirá a comparação com condição para cada linha, da linha 2 até a última linha e irá parar de fazer a comparação quando fizer a comparação referente à “ult_linha”.

Nós queremos: se o valor da célula  da coluna B (linha variável de 2 até a última linha) for igual ao valor da variável “valor_nf”, queremos que o VBA faça a exclusão do intervalo que vai da coluna 1 até a coluna 8, da linha em questão em que a comparação for verdadeira.

O “shift:=xlUp” significa que ele irá fazer com que os dados debaixo desse intervalo excluído subam para preencher o “vazio” que ficará ao excluir esse “intervalo” de dados preenchidos, que corresponde a uma “linha” da nossa tabela.

Ao excluir uma linha, e fazer o shift:=xlUp”, afetaremos a contagem do nosso For, porque a linha abaixo “subirá”.

Portanto, toda vez que tivermos uma exclusão, retiraremos uma unidade da nossa variável auxiliar “linha” para compensar essa “subida”, fazendo com que a estrutura de repetição não seja sabotada pelo procedimento de deslocamento de células.

Após isso, a estrutura de repetição irá acrescentar uma unidade à variável auxiliar “linha”, “descerá” uma linha e fará comparações, repetidamente, até terminarem os registros.

Assim que terminar, ele terá excluído todos os registros em que a NF alvo estavam. E termina a nossa sub.

Com a estrutura de repetição no VBA (Loop For Next no VBA) do “For” conseguimos fazer com que nosso código faça diversas iterações de um ponto inicial até um ponto final, ou seja, da primeira linha da planilha até a última, e podendo realizar alguma ação.

No nosso caso é uma comparação, e talvez uma exclusão, caso atenda a nosso requisito (NF a ser excluída).

Com isso, fazemos com que a aba esteja livre dessa NF a ser excluída logo quando damos o comando, e nosso propósito se cumpre. Na próxima aula iremos aprender a fazer isso para todas as abas também.

Voltar para o índice

Aula 13 – Excel VBA For Each: Como Percorrer Objetos (Intervalos, Células…)

No post de hoje vamos ver como podemos utilizar uma estrutura de repetição, Excel VBA For Each, para percorrer objetos de forma eficiente.

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

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

Como usar o Excel VBA For Each para excluir registros na planilha

Nessa nossa décima terceira aula, mais especificamente falando do segundo formulário, o de exclusão de vendas, iremos aprender como usar a estrutura de repetição For Each VBA para percorrermos as abas do nossos arquivo de registro de vendas e façamos comparações com as linhas da nossa aba de interesse para fazer possíveis exclusões nas linhas dessa aba-alvo.

Observe abaixo a estrutura do nosso código, que será o código disparado quando apertamos o nosso botão OK (verde) do formulário:

Private Sub CommandButton1_Click()

valor_nf = caixa_nf.Value + 0
For Each aba In ThisWorkbook.Sheets
    If aba.Name <> "Opções" Then
        ult_linha = aba.Range("A1048576").End(xlUp).Row    
        For linha = 2 To ult_linha    
            If aba.Cells(linha, 2).Value = valor_nf Then
                aba.Range(aba.Cells(linha, 1), aba.Cells(linha, 8)).Delete shift:=xlUp
                linha = linha - 1
            End If
        Next
    End If
Next
Unload ExclusaoDeVendas

End Sub

Explicação do código acima:

Atribuiremos à variável “valor_nf” o valor que vamos inserir na “caixa_nf”. Ela conterá o valor da nossa NF a ser excluída e será nosso parâmetro de comparação.

OBS: Observe que colocamos um +0 nessa linha de código, porque fazendo isso, o VBA irá converter isso para um número, como dito nas aulas anteriores.

A partir daí, entraremos nas abas-alvo, ou seja, apenas nas abas em que tem registro de vendas (todas menos a aba de Opções).

Para percorrer todas as abas de interesse, usaremos a estrutura de repetição For Each, usando a variável auxiliar “aba” como uma unidade do conjunto de abas, dado pelo comando de ThisWorkbook.Sheets (conjunto de abas nesse arquivo).

Para entrarmos apenas nas abas-alvo usaremos uma comparação: se o nome da aba for diferente de “Opções”, quero entrar e fazer as exclusões. Caso seja a aba de Opções, não irá entrar nem fazer exclusões.

Entrando numa aba-alvo, com registro de vendas, descobriremos qual é a última linha dessa aba indo na última célula da coluna A (A1048576), e dando um Ctrl seta para cima, e chegaremos à última linha preenchida. Esse valor será atribuído à variável “ult_linha” e será usado em seguida.

Em seguida, partiremos para a nossa estrutura de repetição For com uma condição dentro dela.

Iremos andar da linha 2 até a última linha da aba, que será dada pela variável “ult_linha”. Isso significa que ele repetirá a comparação com condição para cada linha, da linha 2 até a última linha e irá parar de fazer a comparação quando fizer a comparação referente à “ult_linha”.

Nós queremos: se o valor da célula  da coluna B (linha variável de 2 até a última linha) for igual ao valor da variável “valor_nf”, queremos que o VBA faça a exclusão do intervalo que vai da coluna 1 até a coluna 8, da linha em questão em que a comparação for verdadeira.

O “shift:=xlUp” significa que ele irá fazer com que os dados debaixo desse intervalo excluído subam para preencher o “vazio” que ficará ao excluir esse “intervalo” de dados preenchidos, que corresponde a uma “linha” da nossa tabela.

Ao excluir uma linha, e fazer o shift:=xlUp”, afetaremos a contagem do nosso For, porque a linha abaixo “subirá”.

Portanto, toda vez que tivermos uma exclusão, retiraremos uma unidade da nossa variável auxiliar “linha” para compensar essa “subida”, fazendo com que a estrutura de repetição não seja sabotada pelo procedimento de deslocamento de células.

Após isso, a estrutura de repetição irá acrescentar uma unidade à variável auxiliar “linha”, “descerá” uma linha e fará comparações, repetidamente, até terminarem os registros. Assim que terminar, ele terá excluído todos os registros em que a NF alvo estavam. E termina a nossa sub.

O nosso código irá fazer todas as exclusões em uma aba, da primeira linha preenchida até a última.

Quando fizer todas as exclusões daquela aba, o código voltará para a estrutura do For Each e nos direcionará para a próxima aba com registros, ou seja, outra aba-alvo, para começar novas comparações entre as linhas de registro e a nossa NF a excluir.

A última linha do nosso código diz respeito ao descarregamento (Unload) do nosso formulário de exclusão de vendas. Ou seja, após todo esse processamento de exclusão, iremos fechá-lo e o usuário entenderá que a exclusão foi feita.

Ao terminar esse processo, a nossa sub fará a exclusão dessa NF em todas as abas da nossa planilha, e definitivamente a NF não irá mais existir em nossos registros. E assim termina a nossa sub.

Com a estrutura de repetição excel VBA For Each conseguimos fazer com que nosso código faça diversas iterações e percorra as abas da nossa planilha para fazer ações específicas.

No nosso caso é uma comparação, e talvez uma exclusão, caso atenda a nosso requisito (NF a ser excluída), varrendo as linhas com auxílio da Estrutura de Repetição For.

Com isso, fazemos com que a aba esteja livre dessa NF a ser excluída logo quando damos o comando, e conseguimos que nosso propósito seja cumprido.

Resumo

Vamos a um breve resumo de a estrutura For Each no VBA. Primeiro vamos traduzir esse nome para facilitar, que seria “para cada” em português.

Mas você pode se perguntar, “para cada o que?”. Isso é simples, isso vai depender do que vamos utilizar, se vamos falar de células em um conjunto de células, de uma aba em um conjunto de abas.

Entendeu a ideia? Vamos percorrer 1 elemento de um todo. Um exemplo para ficar mais fácil é pensar em uma fila com várias pessoas. Então vamos percorrer cada pessoa dentro da fila (For Each Pessoa In Fila).

Viu como fica fácil assim? Agora o que fazer com isso? Bem, como você vai percorrer todos os elementos de um todo, você pode fazer uma verificação, uma soma, uma média ou qualquer outra operação.

No nosso exemplo da aula, verificarmos com a função IF se cada uma dessas abas tem o nome diferente (<>) de “Opções”, se isso for verdadeiro vamos executar o código que está dentro dessa estrutura, caso contrário vamos passar para a próxima.

No exemplo da fila, podemos passar por cada pessoa e verificar a idade de cada uma, se for maior do que 60 podemos gerar um desconto na compra da loja em que a fila foi feita (ou qualquer outra atribuição ou comparação que queira fazer).

Mas resumindo, a ideia do For Each é passar por cada um dos elementos dentro do todo para que você consiga fazer alguma comparação, soma, média ou até mesmo pegar essa informação.

Assim você não precisa fazer isso de forma manual ou até mesmo definir um intervalo fixo para fazer essa ação!

Voltar para o índice

Aula 14 – Formulário de Pesquisa no Excel VBA para Buscar Informações na Tabela

A última ferramenta que vamos construir nessa série de publicações é um Formulário de Pesquisa no Excel VBA dinâmico e automático.

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

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

Por que ter um Formulário de Pesquisa no Excel VBA?

Para pesquisar por informações já cadastradas no seu banco de dados, a fim de conferir ou ratificar alguma informação. Também serve para verificar e poder auxiliar outro formulário, o de Exclusão, também criado na série.

Como fazer o Formulário de Pesquisa no VBA?

Hoje chegamos a nossa décima quarta aula, onde iremos construir um formulário de pesquisa no Excel, para auxiliar os já criados formulários de cadastro e de exclusão de vendas.

Para construir um formulário de pesquisa no VBA vamos utilizar basicamente os mesmos conhecimentos que utilizamos nas aulas anteriores da série. Vamos começar duplicando um formulário já existente utilizando o método de Exportar e Importar, dentro do VBA.

Feito isso, a primeira etapa é personalizar a parte gráfica do nosso formulário de busca no Excel. Vamos ter um campo para que o usuário digite a NF e outro campo para que ele selecione a informação que quer ver. Observe os passos a seguir, para criarmos e moldarmos nosso formulário.

1) Exportar e Importar

Para isso, iremos abrir o VBA, utilizando Alt(+Fn)+F11, e iremos procurar pelos formulários já prontos. Clicaremos no formulário ExclusaoDeVendas, e o renomearemos para ExclusaoDeVendas2 (na propriedade Name dele), para fazermos sua exportação.

Em seguida, iremos com botão direito do mouse nele, já renomeado, e em exportar arquivo. selecione uma pasta para esse arquivo temporário, e clicar em Salvar. Em seguida podemos desfazer a renomeação que fizemos acima, voltando para o nome ExclusaoDeVendas no formulário original.

Agora, iremos de fato importar o formulário “copiado” (exportado) clicando com botão direito em algum formulário existente e clicando em “importar arquivo…”, e selecionando o arquivo que criamos acima, também, e pronto.

Teremos uma cópia do formulário de vendas, com todas as formas e objetos já prontos. Agora começaremos as alterações

2) Modificações na aparência

Conforme no vídeo, clicando no formulário, iremos fazer as seguintes modificações:

– Name: FormularioDePesquisa

– Caption: Formulário de Pesquisa

– Clicaremos na label de “título” e mudaremos sua Caption para “Formulário de Pesquisa”, também, além de a redimensionarmos

– Ajeitar os locais das caixas, labels, imagem etc

– Criar uma caixa de combinação para selecionar o campo que queremos retornar (queremos selecionar uma NF e retornar qualquer campo respectivo àquela NF, então precisamos de uma caixa de combinação para que a gente selecione o que queremos retornar de informação final, a partir daquela NF)

– Mudar a propriedade Name da nova caixa de combinação para “caixa_informacao”

– Mudar a propriedade Font da caixa_informacao para o tamanho 14.

Veja como ficou a aparência final do nosso formulário:

Formulário De Busca No Excel
Formulário De Busca No Excel

3) Código para o botão X

Clicaremos duas vezes no botão OK ou no botão X, entraremos no código desse formulário e apagaremos tudo.

Voltaremos no formulário, e daremos duplo clique no botão de X, para inserir seu código, que será:

Private Sub CommandButton2_Click()
Unload FormularioDePesquisa
End Sub

Explicação:

Ao clicarmos no botão de X, faremos o descarregamento de formulário de pesquisa criado. E encerraremos a sub.

4) Abertura do formulário de Pesquisa no Excel VBA

Em primeiro lugar, precisaremos criar uma lista com os nomes dos cabeçalhos das colunas de informações, para escolher de qual local queremos puxar as informações a serem retornadas a partir da escolha da NF.

A partir dessa lista, que criaremos na aba Opções, da célula G2 até a célula G8, com as informações de Data, Vendedor, Loja, ID, Quantidade, Preço e Valor Total, poderemos passar para a nossa caixa_informacao o que servirá de dados para ela.

Observe abaixo o código que irá ser disparado ao abrirmos o formulário:

Private Sub UserForm_Initialize()
caixa_informacao.RowSource = "Opções!G2:G8"
End Sub

Explicação:
Assim que o formulário for iniciado, a caixa_informacao receberá como fonte de dados a lista de opções criada com os cabeçalhos de colunas que colocamos na aba de Opções, da célula G2 até a célula G8, nos permitindo selecionar qualquer uma delas para serem retornadas.

5) Criar botão para associar à abertura do Formulário

No Módulo 1 do nosso VBA, iremos inserir o seguinte código, para ser associado ao botão:

Sub mostrar_formulario_pesquisa()
FormularioDePesquisa.Show
End Sub

No Excel, criaremos um novo botão: copiaremos (Ctrl+C e Ctrl+V) o já pronto para o de Formulário de Pesquisa, daremos um título para diferenciá-lo, e clicaremos com o botão direito do mouse no nosso botão.

Em seguida escolheremos “atribuir macro…” com o botão esquerdo do mouse. Abrirá uma caixinha e selecionaremos a macro “mostrar_formulario_pesquisa”, e daremos OK.

Pronto, nosso botão já está associado à nossa macro para abrir o Formulário.

Hoje aprendemos a criar esse formulário, e na próxima aula o finalizaremos, com seus códigos e funcionalidades finais.

Voltar para o índice

Formulário Excel VBA: Finalizando a Série

Essa é a última publicação da nossa série de Formulário Excel VBA na qual te ensinamos a construir três tipos de formulários diferentes.

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

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

Como finalizar nosso Formulário Excel VBA

Hoje chegamos a nossa décima quinta e última aula, onde iremos finalizar a construção do nosso Formulário de Pesquisa no Excel, para auxiliar os já criados formulários de cadastro e de exclusão de vendas.

Para construir um formulário de pesquisa no VBA vamos utilizar basicamente os mesmos conhecimentos que utilizamos nas aulas anteriores da série.

Iremos em alguns passos finalizar nosso formulário, de modo que programemos um código que faça a pesquisa ao clicarmos no botão OK, como podemos ver no vídeo e em outros formulários construídos anteriormente.

Código do Botão OK do Formulário de Pesquisa

O código abaixo será o que vamos utilizar no nosso formulário para fazer a pesquisa. Lembrando novamente, queremos pesquisar uma NF específica, e ao digitar a NF e escolher as informações que queremos levantar, iremos apertar OK no nosso formulário.

Esse código será responsável por fazer a pesquisa e será disparado assim que clicarmos OK no nosso formulário. Observe como ele é construído, e em seguida sua explicação:

Private Sub CommandButton1_Click()

nf = caixa_nf.Value + 0

informacao = caixa_informacao.Value

If informacao = "Data" Then
    coluna = 1
ElseIf informacao = "Vendedor" Then
    coluna = 3
ElseIf informacao = "Loja" Then
    coluna = 4
ElseIf informacao = "ID" Then
    coluna = 5
ElseIf informacao = "Quantidade" Then
    coluna = 6
ElseIf informacao = "Preço" Then
    coluna = 7
ElseIf informacao = "Valor Total" Then
    coluna = 8
End If

ult_linha = Sheets("Vendas").Range("A1000000").End(xlUp).Row

For linha = 2 To ult_linha
    If Sheets("Vendas").Cells(linha, 2).Value = nf Then
        texto = texto & Sheets("vendas").Cells(linha, coluna).Value & Chr(10)
    End If
Next

MsgBox (texto)

End Sub

Explicação do Código:

Quando clicarmos no botão OK, o nosso código disparará.

Armazenaremos na variável “nf” o que for escrito pelo usuário na caixa_nf.

OBS: Observe que no final dessa linha de código temos um “ +0 “. Isso acontece porque o VBA entende que o que foi digitado na caixa_nf (que é uma caixa de texto) é um texto.

Adicionando 0 unidades a esse “valor”, transformamos ele em número, porque ele vai fazer uma conta e percebe que estamos fazendo operações com números.

Armazenaremos na varável “informacao” o valor do que for selecionado na caixa de combinação caixa_informacao (Data, Vendedor, Loja, ID, Quantidade, Preço, Valor Total).

Então, começa uma estrutura IF, que vai verificar o que está contido na variável “informacao”, e vai buscar a coluna respectiva daquela informação que foi selecionada, para que saiamos em que coluna buscar a informação final que queremos mostrar.

Ao selecionar a informação, armazenaremos na variável “coluna” o número da coluna para fazer a busca desejada.

Ou seja, na primeira coluna, teremos a informação respectiva da Data; na terceira teremos a de vendedor; quarta, de loja; quinta; de ID; sexta, de Quantidade; sétima de Preço; e na oitava, de Valor Total. Ao saber a coluna, saberemos onde está a informação que queremos retornar.

A partir daí, buscaremos a última linha da coluna A da aba Vendas e armazenaremos isso na variável “ult_linha”, porque queremos percorrer a aba de Vendas procurando todas as informações de uma NF específica.

Invocaremos a estrutura de repetição For, que fará ações da linha 2 até a última linha da aba Vendas. Essas ações serão da seguinte natureza: se na coluna 2 (a coluna de NFs), em qualquer que seja a linha, o valor bater com o valor de NF armazenado lá no começo na variável “nf”, queremos que ele faça uma ação específica.

A ação em questão é a armazenagem na variável “texto” o que tiver naquela linha que ele encontrar a informação desejada (dada pela variável “linha” vinda da estrutura For), e na coluna que desejamos ter a informação, dada pela varia´vel “coluna” definida acima.

OBS: Como podemos ter algo relacionado àquela NF em mais de uma linha, queremos que a variável texto armazene todo o conteúdo de informações, por isso ela vai ter essa definição diferenciada.

Ao repetir esse procedimento com a estrutura For, armazenaremos na variável texto o texto antigo, e concatenaremos com o novo valor que ele encontrará, encontrando outra informação nova a partir de outra linha, conforme a mesma NF.

Iremos concatenar isso com o “Chr(10)”, que nada mais é do que dar um “Enter” (quebra de linha) no nosso texto total.

Então, a cada nova informação adicionada a uma informação antiga, daremos uma quebra de linha para separar as informações e ficar claro.

Em seguida, iremos mostrar esse conteúdo de texto na variável “texto” (o texto final/total) numa caixa de mensagem (MsgBox). E nosso código termina.

Nesse post finalizamos nosso Formulário de Pesquisa no VBA. Para pesquisar por informações já cadastradas no seu banco de dados, a fim de conferir ou ratificar alguma informação, é importante ter uma ferramenta como essa para auxílio.

Lembre-se de que ele serve para auxiliar também nos outros formulários que aprendemos a criar na série, como o de Registro e o de Exclusão.

Conclusão

Nessa série eu te mostrei como criar um Formulário de Vendas no VBA do zero para que você não só tenha um formulário de vendas como também tenha a capacidade de criar outros tipos de formulários.

A ideia é que você tenha o conhecimento para criar qualquer outro tipo de formulário que precise para o seu trabalho, para sua empresa ou até mesmo um formulário pessoal para seu controle.

A linguagem VBA é muito útil dentro do Excel, pois ela te ajuda automatizando diversas tarefas, então aqueles processos que seriam complicados e podem gerar erros, você pode ajustar com o VBA e deixar automático, rápido e com menos chance de erro nos processos.

É claro que você tem total liberdade para fazer as modificações que quiser ou até se aprofundar mais em VBA para personalizar ainda mais o seu formulário!

E aí, gostou dessa série? Já vai criar outro formulário para te ajudar no trabalho?

Voltar para o índice

Hashtag Treinamentos

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


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