Blog

Postado em em 23 de outubro de 2019

MsgBox VBA e InputBox para Interagir com o Usuário

Você já deve ter ouvido falar em msgbox no VBA, mas você sabe como criar essas caixas de diálogo no Excel? Vem que eu te mostro!

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:

Nessa aula eu quero te mostrar como funciona a MsgBox (caixa de diálogo/caixa de mensagem) no VBA.

Só que além disso, vou te mostrar também como você pode utilizar essa MsgBox juntamente com a InputBox para deixar o seu trabalho ainda mais completo!

A MsgBox VBA é uma caixa de diálogo, e você pode criar uma caixa de mensagem personalizada.

Para fazer isso, vamos usar as opções do msgbox no VBA para que o usuário possa escolher “sim” ou “não”, por exemplo. De acordo com a resposta, podemos fazer diferentes ações.

Bora lá aprender sobre as caixas de diálogo no Excel?

No início da aula de hoje, nós temos uma tabela com datas e vendas registradas por uma empresa fictícia, que tomaremos como objeto de estudo.

Além disso, temos a quantidade monetária de vendas feitas em cada data, e os respectivos vendedores responsáveis pelas vendas. Acompanhe:

0 1

O objetivo da aula de hoje é calcular, com automação de repetição (e eficiência), se um dia merece receber bônus referente a vendas ou não.

O que vai orientar o bônus é: se o dia tiver vendas superiores a 5000 reais, terá 10% de bônus em relação ao total vendido (para aquele dia).

Para isso, desenvolvemos o código abaixo:

Sub bonificacao()

For linha = 2 To 17

    If Cells(linha, 3).Value > 5000 Then

        resposta = MsgBox("A bonificação do vendedor " & _
       Cells(linha, 2).Value & " foi de R$" & Cells(linha, 3).Value * 0.1 & _
       ". Você quer preencher essa informação na planilha?", vbYesNo, "Pergunta de Bonificação")

        If resposta = 6 Then
          Cells(linha, 4).Value = Cells(linha, 3).Value * 0.1
       End If

    End If

Next 

End Sub

Explicação do código acima:

Como mostramos num dos posts anteriormente com um exemplo parecido, vamos iniciar uma estrutura de repetição do tipo For, que vai realizar ações repetitivas.

Nesse caso, ela vai realizar ações a partir da variável auxiliar “linha”, que vai do valor 2 até o valor 17.

A cada “volta” da nossa estrutura de repetição, o valor da variável auxiliar “linha” é acrescentado de 1 unidade. Assim configuramos a estrutura para iniciar e acabar em momentos desejados.

As ações a serem repetidas são:

  • Comparar se o valor da 3ª coluna (coluna C), a cada linha representada pela variável “linha” é maior do que 5000. Caso seja:
    • Armazenar na variável “resposta” o que vier de resposta do usuário para a caixa de mensagens no VBA (MsgBox VBA), que vai mostrar o texto, que contém:
      • o nome do vendedor, que está na 2ª coluna (coluna B) naquela “linha”
      • a bonificação que está na 3ª coluna (coluna B), naquela “linha”
    • A caixa de mesagem no VBA vai dispor de dois botões: “sim” e “não”. A resposta para o botão selecionado “sim” é entendida como o número 6; já para a resposta “não” é entendida como o número 7, por padrão do VBA.
    • Uma pergunta vai ser disposta para o usuário perguntando se ele quer preencher a informação de bonificação na planilha
  • Caso a resposta do usuário seja pela opção “sim” (se traduz em armazenar na variável “resposta” o valor 6):
    • A célula da 4ª coluna (coluna D) a cada “linha” vai receber o valor que está na mesma “linha”, mas na 3ª coluna (coluna C), multiplicado por 10% (0,10)
  • Seguirá fazendo as mesmas comparações e ações para todas as linhas, até a linha 17, quando a estrutura For acabará, e o código seguirá
  • Se encerra o código

Observe as duas primeiras caixas de mensagem geradas pelo nosso código e o efeito do clique na opção “Sim” em uma delas:

Msgbox no VBA

Fazendo todas as ações explicadas acima, e clicando “Sim” para todas as caixas de mensagem, teremos o seguinte resultado:

2 1

MsgBox e InputBox no VBA

Nessa parte eu vou te mostrar como você pode utilizar a MsgBox que acabou de aprender em conjunto com a InputBox, que é uma caixa onde o usuário vai inserir uma informação de forma manual.

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

Para baixar a planilha utilizada nessa aula clique aqui!

O que é uma MsgBox VBA?

Essas são ferramentas do VBA (do inglês Visual Basic for Application) que é linguagem de programação por trás do Excel, ou seja, além de tudo que já temos dentro do ambiente Excel é possível escrever códigos e utilizar diferentes ferramentas para incrementar ainda mais a utilização desse Software no dia a dia. O MsgBox VBA é uma caixa de mensagem que aparece no Excel como uma caixa informativa, como por exemplo quando temos um erro ou algo do gênero aparecem esse tipo de pop up para dar um aviso. Já o InputBox é uma caixa um pouco diferente, pois permite ao usuário inserir um dado dentro dela.

Quando utilizar a MsgBox VBA e o InputBox?

Vamos utilizar o MsgBox VBA quando for necessário mostrar uma mensagem ao usuário, seja ela qual for podendo essa mensagem conter um aviso, um número ou informações. Neste caso vamos utilizar o MsgBox para informar ao usuário uma condição de estoque de um determinado produto.

A função InputBox será utilizada para que o Excel nos mostre uma janela para inserir o valor do estoque atual, em seguida esse valor será atribuído a uma célula para que possamos novamente fazer a comparação entre o estoque atual e estoque mínimo.

Como utilizar essas ferramentas do VBA?

O primeiro passo que vamos fazer é criar uma espécie de botão para atribuirmos a macro (que é o código gerado em VBA) para facilitar a execução desse código, fazendo com que o usuário não tenha que acessar uma guia específica e escolher qual macro deseja executar.

Para a criação do botão vamos até a guia Inserir e vamos inserir o formato de um retângulo no ambiente Excel. (O usuário pode escolher qualquer uma das formas para a criação do botão).

Selecionando a forma de retângulo para a criação do botão
Selecionando a forma de retângulo para a criação do botão

Ao clicar na opção basta depois clicar e arrastar dentro de algum ponto dentro do Excel para criar a forma do tamanho desejado.

Retângulo criado
Retângulo criado

Feito isso a forma ficará selecionada e o usuário poderá ver que uma nova guia foi “criada”, que é a guia Formatar. Nesta guia podemos alterar a formatação deste “botão” para que fique mais apresentável.

Modificando os efeitos de forma do botão
Modificando os efeitos de forma do botão

Na parte de Efeitos de Forma vamos selecionar em Predefinição a segunda opção. Lembrando que o usuário poderá formatar da maneira que achar mais adequada. É possível também alterar a cor deste botão na opção Preenchimento da Forma. Feito isso teremos o seguinte resultado.

Botão com efeitos e posicionado ao lado da tabela
Botão com efeitos e posicionado ao lado da tabela

Temos a tabela onde faremos a comparação entre Estoque Atual e Estoque Mínimo e ao lado é possível observar o botão formatado. Agora para o próximo passo vamos atribuir uma macro a esse botão, para isso basta clicar com o botão direito do mouse em cima do botão e selecionar a opção Atribuir macro.

Selecionando a opção para atribuir a macro ao botão
Selecionando a opção para atribuir a macro ao botão

Feito isso o Excel irá abrir uma janela de atribuição de macros, como já temos o código nesse arquivo de Excel vamos apenas selecionar a macro mensagem e confirmar clicando em OK.

Selecionando a macro a ser atribuída
Selecionando a macro a ser atribuída

Feito isso a macro está atribuída ao botão, isso quer dizer que toda vez que clicarmos nesse botão de agora em diante esse código que foi associado será executado. Esse código vai fazer uma comparação entre a célula C3 e D3, então sempre que o estoque atual for maior do que o estoque mínimo teremos uma caixa de mensagem dizendo que o estoque está suficiente, caso contrário teremos uma mensagem dizendo que o estoque está insuficiente.

Vamos agora colocar dois valores distintos, um maior e um menor e vamos clicar no botão para verificar o resultado de cada um dos números comparados.

Testando a macro com um valor menor
Testando a macro com um valor menor
Testando a macro de MsgBox VBA com um valor maior
Testando a macro de MsgBox VBA com um valor maior

Após verificar que a macro está funcionando vamos analisar o código escrito para a execução dessa ação, para isso basta ir até a guia Exibir, selecionar a opção Macros e em seguida Exibir Macros.

Menu para acessar as macros criadas
Menu para acessar as macros criadas

Ao selecionar essa opção teremos a mesma janela que vimos para atribuir a macro ao botão, nesta parte a macro mensagem será selecionada e em seguida vamos selecionar a opção Editar.

Selecionando a macro com MsgBox VBA para editá-la
Selecionando a macro com MsgBox VBA para editá-la

Ao pressionar a opção Editar o ambiente VBA será aberto com o código escrito referente a essa macro mensagem que foi selecionada.

Abertura do ambiente com MsgBox VBA
Abertura do ambiente com MsgBox VBA

Como temos dois códigos no nosso programa os dois estão aparecendo, no entanto vamos analisar neste momento somente o primeiro deles.

Sub mensagem()

If Range("C3") > Range("D3") Then
	msgbox ("Estoque suficiente!")
Else
	msgbox ("CUIDADO! Estoque insuficiente!")
End If

End Sub

Sempre que vamos começar um código no VBA escrevemos Sub seguido do nome da macro e no final temos o End Sub para indicar o término do código. Na primeira linha do código temos a função If que seria a função SE (tradução), ou seja, vamos fazer uma comparação. Essa comparação está sendo feita entre o Range C3 e o Range D3, que são exatamente as células C3 e D3, então estamos verificando se a célula C3 é maior do que a célula D3. Ao final da linha temos a escrita Then que significa então, isso quer dizer que se essa comparação for verdadeira iremos executar o que está escrito na linha abaixo.

Na linha abaixo que está dentro da função If temos a função MsgBox VBA que é exatamente a nossa caixa de mensagem que aparece dentro do ambiente Excel quando a macro é executada. É possível observar que dentro dos parênteses se encontra o texto que será exibido nessa caixa, lembrando que como é um texto deve ser colocado entre aspas duplas.

Abaixo dessa linha de código temos a função Else, que funciona como um complemento da função If, ou seja, vamos ter uma leitura dessa forma: “se C3 for maior do que D3 faça isso, se não faça aquilo”. Neste caso o Else significa o se não, ou seja, se aquela comparação não for verdadeira vamos para o segundo caso, que é se ela for falsa, que é exatamente o que se encontra na função Else.

Abaixo da função Else temos o código que será executado caso entre dentro dessa função (considerando a primeira comparação como falsa). Esse código é novamente utilizando a função MsgBox, no entanto com uma mensagem diferente da primeira, pois neste caso como a comparação foi falsa isso significa que o dado da célula C3 é menor do que o da célula D3, isso quer dizer que o estoque atual se encontra menor do que o estoque mínimo.

Por fim temos a função End If que serve para indicar ao código que a função If termina naquele ponto e não teremos mais nada dentro dela, isso quer dizer que o código continua após a finalização da função.

Agora vamos analisar o segundo caso que é com a utilização da função InputBox.

Tabela para utilização da macro estoque com MsgBox VBA
Tabela para utilização da macro estoque com MsgBox VBA

Neste caso vamos executar uma macro para que o Excel peça o valor a ser inserido na célula de estoque atual ao invés de escrevermos diretamente dentro dela. Neste caso vamos criar novamente um botão e atribuir a macro de estoque a esse botão, em seguida ao pressionar este botão teremos a caixa de inserção de dados que é o InputBox.

Janela da função InputBox com explicação do que deve ser preenchido
Janela da função InputBox com explicação do que deve ser preenchido

É possível verificar que temos um campo para inserir o dado da quantidade de estoque e ao pressionar OK esse valor será inserido na célula C3 e teremos a macro mensagem sendo executada automaticamente.

MsgBox VBA referente a comparação dos valores
MsgBox VBA referente a comparação dos valores

Isso quer dizer que ao inserir o valor já estamos executando a outra macro logo em seguida para fazer a comparação do estoque atual com o estoque mínimo. Vamos agora verificar a escrita do código para essa macro.

Sub estoque()

Range("C3") = InputBox("Qual é o estoque atual?")

Call mensagem

End Sub

Assim como na outra macro temos Sub para iniciar a macro seguido do nome, e para finalizá-la temos o End Sub no final do código. Na primeira linha temos que a célula C3 irá receber o valor (esse é o significado do = na fórmula) do InputBox que tem a seguinte mensagem “Qual é o estoque atual?”, ou seja, além de podermos solicitar um valor, temos a opção de colocar uma mensagem para que o usuário entenda o que está sendo pedido. Na segunda linha do código temos uma “chamada” para a outra macro que foi criada anteriormente, que é a macro para fazer a comparação do estoque atual com o estoque mínimo, para isso utilizamos a função Call seguido do nome da macro que será executada.

Conclusão

Nessa aula eu te mostrei o que é o MsgBox VBA, como utilizá-lo e ainda mostrei como você pode combinar essa ferramenta com a ferramenta InputBox no VBA, que permite com que o usuário insira um valor ao rodar o código.

A caixa de mensagem vai mostrar uma mensagem para o usuário, que pode ser personalizada para facilitar a utilização do programa pelo usuário.

Além disso, você pode pedir para que esse usuário insira valores enquanto estiver rodando o código para fazer verificações e mostrar uma mensagem de retorno!

Hashtag Treinamentos

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


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

Quer aprender a criar Dashboards Incríveis no Excel para impressionar?Coloque seu e-mail e comece agora esse minicurso!