VBA – Caixa de Mensagens Sim Não (Msgbox)
In this Article
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.
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 | |
vbCritical | |
vbQuestion | |
vbExclamation |
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.