VBA – Caixa de Mensagens Sim Não (Msgbox)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on April 4, 2023

Este tutorial abordará como usar a função VBA MsgBox para exibir caixas de mensagens para os usuários (incluindo a caixa de mensagens YesNo). Você também pode estar interessado em nosso artigo sobre as caixas de entrada (InputBoxes).

Função VBA MsgBox

Em VBA, é fácil exibir uma simples MsgBox:

MsgBox "Esta é minha caixa de mensagens"

No entanto, você pode fazer muito mais do que exibir uma simples caixa de mensagens OK. Vejamos rapidamente um exemplo complicado antes de mergulharmos em detalhes específicos.

VBA Caixa de Mensagens YesNo

Abaixo criaremos uma caixa de mensagens com:

  • Um título “Título da caixa de mensagens” e um prompt “Texto”
  • Um ícone de ponto de interrogação
  • Opções Sim / Não em vez de um simples “OK”
  • Botão padrão = ‘Não’
Dim resposta As Integer

resposta = MsgBox("Texto", vbQuestion + vbYesNo + vbDefaultButton2, "Título da caixa de mensagens")

A caixa de mensagens retornará vbYes ou vbNo, dependendo da escolha do usuário. Você pode então realizar diferentes ações com base na escolha:

If resposta = vbYes Then
  MsgBox "Sim"
Else
  MsgBox "Não"
End If

Na próxima seção, mostraremos todas as opções disponíveis para você ao criar caixas de mensagens. Em seguida, apresentaremos a sintaxe da função MsgBox e, finalmente, passaremos por outros exemplos de caixas de mensagens.

Opções da Caixa de Mensagens VBA

Dê uma olhada na imagem abaixo. Aqui você verá (quase) todas as opções disponíveis para você ao criar caixas de mensagens. Observe os ícones e os diferentes botões.

vba write messagebox code

Esta é uma captura de tela do “MessageBox Builder” de nosso Add-in Premium VBA: AutoMacro. O MessageBox Builder permite que você projete rapidamente sua caixa de mensagens desejada e insira o código em seu módulo de código. Ele também contém muitos outros construtores de códigos, uma extensa biblioteca de códigos VBA, e uma variedade de ferramentas de codificação. É uma ferramenta indispensável para qualquer desenvolvedor VBA.

Sintaxe da função MsgBox

MsgBox( mensagem [, botões ] [, título ] [, arquivo de ajuda, contexto ] )

mensagem (Obrigatório) – Este é o texto principal da caixa de mensagens.

botões – Escolha quais botões devem ser exibidos. Se omitido, ‘OKonly’. Aqui você também pode especificar qual ícone mostrar e o botão padrão.

título – O título na parte superior da caixa de mensagens. Se omitido, o nome do aplicativo atual é exibido (ex. Microsoft Excel).

arquivo de ajuda – Especifique o arquivo de ajuda que pode ser acessado quando o usuário clica no botão ‘Ajuda’. Se especificado, então você também deve adicionar contexto (abaixo)

contexto – Expressão numérica que representa o número de contexto da Ajuda atribuído ao tópico apropriado da Ajuda.

Você provavelmente pode ignorar os argumentos de ajuda e de contexto. Eu nunca os vi usados.

Personalize o Título da Caixa de Mensagens e a Mensagem

A função MsgBox permite que você personalize o título e envie mensagens imediatas como esta:

Msgbox "Mensagem",,"Título"

Outro exemplo:

Sub MsgBoxMensagemTitulo()
  MsgBox "Passo 1 Completo. Clique OK para rodar o passo 2.",, "Passo 1 de 5"
End Sub

Importante! Você deve se lembrar de informar o seu texto entre aspas.

Quebra de Linha da Caixa de Mensagens

Você também pode adicionar quebras de linha aos avisos de sua caixa de mensagens com a ‘vbNewLine’.

Sub MsgBoxMensagemTitulo_NovaLinha()
  MsgBox "Passo 1 Completo." & vbNewLine & "Clique OK para rodar o passo 2.", , "Passo 1 de 5"
End Sub

 

Perceba que usamos o símbolo “&” para unir texto. Você pode aprender mais sobre o uso do “&” com texto e outras opções para inserir linebreaks em nosso artigo sobre como unir texto.

Ícones da MsgBox

O VBA lhe dá a possibilidade de adicionar um dos quatro ícones predefinidos a suas caixas de mensagens:

Constante do Ícone Ícone
vbInformation vba information msgbox icon
vbCritical vba critical msgbox icon
vbQuestion vba question msgbox icon
vbExclamation vba exclamation msgbox icon

A constante do ícone deve ser colocada dentro do argumento do botão:

Sub MsgBoxIconeDeQuestao()
  MsgBox "Exemplo de Questão", vbQuestion
End Sub

Isto irá gerar a caixa de mensagem padrão ‘OK’ com o ícone Pergunta:

Observe como quando você digita, o Editor VBA lhe mostrará as opções disponíveis:

Isto é útil porque você não precisa lembrar a sintaxe exata ou nomes de ícones ou botões.

Agora vamos fazer uma demonstração de cada ícone de caixa de mensagens:

Ícones da MsgBox – Informações

Sub MsgBoxIconeDeInformacao()
  MsgBox "Examplo de Informação", vbInformation
End Sub

 

Ícones da MsgBox – Crítico

Sub MsgBoxIconeCritico()
  MsgBox "Examplo de Crítico", vbCritical
End Sub

 

Ícones da MsgBox – Questão

Sub MsgBoxIconeDeQuestao()
  MsgBox "Examplo de Questão", vbQuestion
End Sub

 

Ícones da MsgBox – Exclamação

Sub MsgBoxIconeDeExclamacao()
  MsgBox "Examplo de Exclamação", vbExclamation
End Sub

Abaixo falaremos sobre a geração de caixas de mensagens com diferentes layouts de botões. Se você escolher um tipo de caixa de mensagens diferente, você precisará anexar o tipo de ícone após os botões usando um “+”:

Sub MsgBoxIconeDeQuestao()
  MsgBox "Você deseja continuar?", vbOKCancel + vbQuestion
End Sub

 

MsgBox Variáveis

Até agora temos trabalhado principalmente com a caixa de mensagens padrão ‘OK’. A caixa de mensagens ‘OK’ tem apenas uma opção: Pressionar ‘OK’ permite que o código continue. Entretanto, você também pode especificar outros agrupamentos de botões: OK / Cancelar, Sim / Não, etc.

Neste caso, você vai querer realizar diferentes ações com base em qual botão é pressionado. Vejamos um exemplo.

Aqui está a caixa de mensagens que vamos gerar:

Este é o código completo (a seguir o explicaremos):

Sub MsgBoxVariavel()

Dim resposta As Integer
resposta = MsgBox("Você deseja continuar?", vbQuestion + vbYesNo)

  If resposta = vbYes Then
    MsgBox "Sim"
  Else
    MsgBox "Não"
  End If

End Sub

Primeiro atribuímos a saída da caixa de mensagens a uma variável do tipo integer.

Dim resposta As Integer

resposta= MsgBox("Você deseja continuar?", vbQuestion + vbYesNo)

Em seguida, usamos um If-Else para determinar o que fazer com base em qual botão é pressionado:

If resposta = vbYes Then
  MsgBox "Sim"
Else
  MsgBox "Não"
End If

A função MsgBox retorna um valor inteiro (entre 1-7), então definimos a variável como um tipo integer. Entretanto, ao invés de se referir ao número inteiro, pode-se referir a uma constante (ex. vbOK, vbCancel, etc.). Veja na tabela abaixo todas as opções:

Botão Constante Valor
OK vbOK 1
Cancelar vbCancel 2
Anular vbAbort 3
Repetir vbRetry 4
Ignorar vbIgnorar 5
Sim vbYes 6
Não vbNo 7

Agora vamos fazer uma demonstração de cada grupo de botões:

Caixa de Mensagens OK – vbOKOnly

Esta é a caixa de mensagens padrão da VBA.

Sub MsgBox_OKOnly()

Dim resposta As Integer
resposta= MsgBox("Exemplo OKOnly", vbOKOnly)

End Sub

Caixa de Mensagens OK Cancelar  – vbOKCancel

Sub MsgBox_OKCancelar()

Dim resposta As Integer
resposta = MsgBox("Exemplo OK Cancelar", vbOKCancel)

  If resposta = vbOK Then
    MsgBox "OK"
  Else
    MsgBox "Cancelar"
  End If

End Sub

Caixa de Mensagens Sim Não – vbYesNo

Sub MsgBox_Sim_Nao()

Dim resposta As Integer
resposta = MsgBox("Exemplo Sim Não", vbYesNo)

  If resposta = vbYes Then
    MsgBox "Sim"
  Else
    MsgBox "Não"
  End If

End Sub

Caixa de Mensagens Sim Não Cancelar – vbYesNoCancel

Sub MsgBox_SimNaoCancelar()

Dim resposta As Integer
resposta = MsgBox("Exemplo Sim Não Cancelar", vbYesNoCancel)

  If resposta = vbYes Then
    MsgBox "Sim"
  ElseIf resposta = vbNo Then
    MsgBox "Não"
  Else
    MsgBox "Cancelar"
  End If

End Sub

Caixa de Mensagens Anular Repetir Ignorar – vbAbortRetryIgnorar

Sub MsgBox_AnularRepetirIgnorar()

Dim resposta As Integer
resposta = MsgBox("Exemplo Anular Repetir Ignorar", vbAbortRetryIgnore)

  If resposta = vbAbort Then
    MsgBox "Anular"
  ElseIf resposta = vbRetry Then
    MsgBox "Repetir"
  Else
    MsgBox "Ignorar"
  End If

End Sub

Caixa de Mensagens Repetir Cancelar – vbRetryCancel

Sub MsgBox_RepetirCancelar()

Dim resposta As Integer
resposta = MsgBox("Exemplo Repetir Cancelar", vbRetryCancel)

  If resposta = vbRetry Then
    MsgBox "Repetir"
  Else
    MsgBox "Cancelar"
  End If

End Sub

VBA MessageBox Exemplos

Caixa de Mensagens de Confirmação Antes de Executar a Macro

Este código exibirá uma caixa de mensagens Sim Não antes de chamar uma macro. Se Sim for clicado, a macro é chamada, se Não for clicado, a Macro não é executada.

Sub Msgbox_AntesDeRodar()

  Dim resposta As Integer
  resposta = MsgBox("Você deseja rodar a Macro1?", vbQuestion + vbYesNo)

  If resposta = vbYes Then Call Macro1

End Sub

 

Caixa de Mensagens Sim / Não  – Exit Sub

Aqui confirmaremos com o usuário se deve continuar executando uma macro. Se não for clicado, o código sairá da macro, caso contrário, o procedimento continuará.

Sub Msgbox_Antes_De_Rodar()

  Dim resposta As Integer
  resposta = MsgBox("Você deseja continuar?", vbQuestion + vbYesNo)

  If resposta = vbNo Then Exit Sub
  
  'Algum código

End Sub

Caixa de mensagens VBA em Access VBA

Todos os exemplos acima funcionam exatamente da mesma forma em Access VBA e em Excel VBA.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA