Este tutorial cobrirá como usar a função VBA MsgBox para exibir caixas de mensagens aos usuários (incluindo a caixa de mensagens YesNo). Você também pode estar interessado em nosso artigo sobre InputBoxes.
Função VBA MsgBox
No VBA, é fácil exibir um MsgBox simples:
1 | MsgBox "Esta é uma caixa de mensagem" |
No entanto, você pode fazer muito mais do que exibir uma simples caixa de mensagem OK. Vejamos rapidamente um exemplo complicado antes de mergulharmos em detalhes …
Caixa de mensagem VBA Sim Não
A seguir, criaremos uma caixa de mensagem com:
- Um título “Título da caixa de mensagem” 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’
123 | Dim answer As Integeranswer = MsgBox ("Texto", vbQuestion + vbYesNo + vbDefaultButton2, "Título da caixa de mensagem") |
A caixa de mensagem retornará vbYes ou vbNo dependendo da escolha do usuário. Você pode então realizar diferentes ações com base na escolha:
12345 | Se a resposta = vb Sim, entãoMsgBox "Sim"OutroMsgBox "Não"Fim se |
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, examinaremos outros exemplos de caixa de mensagem.
Opções de caixa de mensagem VBA
Dê uma olhada na imagem abaixo. Aqui você verá (quase) todas as opções disponíveis para você ao criar caixas de mensagem. Observe os ícones e os diferentes botões.
Esta é uma captura de tela do “MessageBox Builder” de nosso suplemento VBA Premium: AutoMacro. O MessageBox Builder permite que você crie rapidamente sua caixa de mensagem desejada e insira o código em seu módulo de código. Ele também contém muitos outros criadores de código, uma extensa biblioteca de código VBA e uma variedade de ferramentas de codificação. É um must-have para qualquer desenvolvedor VBA.
Sintaxe da função MsgBox
MsgBox (prompt [, botões] [, título] [, arquivo de ajuda, contexto])
prompt (obrigatório) - Este é o texto da caixa de mensagem principal.
botões - Escolha quais botões exibir. Se omitido, 'OK apenas'. Aqui você também pode especificar o ícone a ser mostrado e o botão padrão.
título - O título na parte superior da caixa de mensagem. 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, você também deve adicionar contexto (abaixo)
contexto - Expressão numérica que representa o número do contexto da Ajuda atribuído ao tópico da Ajuda apropriado.
Você provavelmente pode ignorar o arquivo de ajuda e os argumentos de contexto. Eu nunca os vi usados.
Personalize o título e o prompt da caixa de mensagem
A função MsgBox permite que você personalize o título e as mensagens de prompt como:
1 | Msgbox "Prompt" ,, "Title" |
Outro exemplo:
123 | Sub MsgBoxPromptTitle ()MsgBox "Etapa 1 concluída. Clique em OK para executar a etapa 2." ,, "Etapa 1 de 5"End Sub |
Importante! Você deve se lembrar de cercar seu texto com citações.
MessageBox LineBreaks
Você também pode adicionar quebras de linha aos prompts da caixa de mensagem com ‘vbNewLine’.
123 | Sub MsgBoxPromptTitle_NewLine ()MsgBox "Etapa 1 concluída." & vbNewLine & "Clique em OK para executar a etapa 2.", "Etapa 1 de 5"End Sub |
Observe que usamos o símbolo & para juntar o texto. Você pode aprender mais sobre como usar & com texto e outras opções para inserir quebras de linha em nosso artigo sobre junção de texto.
Ícones MsgBox
O VBA oferece a capacidade de adicionar um dos quatro ícones predefinidos às suas caixas de mensagem:
Constante de ícone | Ícone |
---|---|
vbInformation | |
vbCritical | |
vbQuestion | |
vbExclamation |
A constante do ícone deve ser colocada dentro do argumento do botão:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Exemplo de pergunta", vbQuestionEnd Sub |
Isso gerará a caixa de mensagem "OK" padrão com o ícone de pergunta:
Observe como, quando você digita, o Editor VBA mostra as opções disponíveis para você:
Isso é útil porque você não precisa se lembrar da sintaxe ou dos nomes exatos dos ícones ou botões.
Agora vamos demonstrar cada ícone da caixa de mensagem:
Ícones MsgBox - Informações
123 | Sub MsgBoxInformationIcon ()MsgBox "Exemplo de informação", vbInformationEnd Sub |
Ícones MsgBox - Crítico
123 | Sub MsgBoxCriticalIcon ()MsgBox "Exemplo crítico", vbCriticalEnd Sub |
Ícones MsgBox - Pergunta
123 | Sub MsgBoxQuestionIcon ()MsgBox "Exemplo de pergunta", vbQuestionEnd Sub |
Ícones MsgBox - Exclamação
123 | Sub MsgBoxExclamationIcon ()MsgBox "Exemplo de exclamação", vbExclamationEnd Sub |
A seguir, falaremos sobre como gerar caixas de mensagens com diferentes layouts de botões. Se você escolher um tipo de caixa de mensagem diferente, será necessário anexar o tipo de ícone após os botões usando um “+”:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Deseja continuar?", VbOKCancel + vbQuestionEnd Sub |
Variáveis MsgBox
Até agora, trabalhamos principalmente com a caixa de mensagem "OK" padrão. A caixa de mensagem OK tem apenas uma opção: Pressionar 'OK' permite que o código continue. No entanto, você também pode especificar outros agrupamentos de botões: OK / Cancelar, Sim / Não, etc.
Nesse caso, você desejará executar ações diferentes com base no botão pressionado. Vejamos um exemplo.
Aqui está a caixa de mensagem que geraremos:
Este é o código completo (vamos decompô-lo a seguir):
123456789101112 | Sub MsgBoxVariable ()Dim answer As Integeranswer = MsgBox ("Deseja continuar?", vbQuestion + vbYesNo)Se a resposta = vb Sim, entãoMsgBox "Sim"OutroMsgBox "Não"Fim seEnd Sub |
Primeiro, atribuímos a saída da caixa de mensagem a uma variável inteira.
123 | Dim answer As Integeranswer = MsgBox ("Deseja continuar?", vbQuestion + vbYesNo) |
Em seguida, usamos um If-Else para determinar o que fazer com base em qual botão é pressionado:
12345 | Se a resposta = vb Sim, entãoMsgBox "Sim"OutroMsgBox "Não"Fim se |
A função MsgBox retorna um valor inteiro (entre 1-7), portanto, definimos a variável como um tipo inteiro. No entanto, em vez de se referir ao número inteiro, você pode se referir a uma constante (por exemplo, vbOK, vbCancel, etc.). Observe esta tabela para ver todas as opções:
Botão | Constante | Valor |
---|---|---|
OK | vbOK | 1 |
Cancelar | vbCancel | 2 |
Abortar | vbAbort | 3 |
Tentar novamente | vbRetry | 4 |
Ignorar | vbIgnore | 5 |
sim | vb Sim | 6 |
Não | vbNo | 7 |
Agora vamos demonstrar cada agrupamento de botões:
OK Message Box - vbOKOnly
Esta é a caixa de mensagem VBA padrão.
123456 | Sub MsgBox_OKOnly ()Dim answer As Integeranswer = MsgBox ("Exemplo OKOnly", vbOKOnly)End Sub |
OK Cancelar caixa de mensagem - vbOKCancel
123456789101112 | Sub MsgBox_OKCancel ()Dim answer As Integeranswer = MsgBox ("OK Cancelar Exemplo", vbOKCancel)Se resposta = vbOK EntãoMsgBox "OK"OutroMsgBox "Cancelar"Fim seEnd Sub |
Sim Não Caixa de Mensagem - vb Sim Não
123456789101112 | Sub MsgBox_YesNo ()Dim answer As Integeranswer = MsgBox ("Sim Não Exemplo", vb Sim Não)Se a resposta = vb Sim, entãoMsgBox "Sim"OutroMsgBox "Não"Fim seEnd Sub |
Sim Não Cancelar Caixa de Mensagem - vbYesNoCancel
1234567891011121314 | Sub MsgBox_YesNoCancel ()Dim answer As Integeranswer = MsgBox ("Sim Não Cancelar Exemplo", vbYesNoCancel)Se a resposta = vb Sim, entãoMsgBox "Sim"ElseIf answer = vbNo ThenMsgBox "Não"OutroMsgBox "Cancelar"Fim seEnd Sub |
Abortar novamente a caixa de mensagem para ignorar - vbAbortRetryIgnore
1234567891011121314 | Sub MsgBox_AbortRetryIgnore ()Dim answer As Integeranswer = MsgBox ("Abort Retry Ignore Example", vbAbortRetryIgnore)Se answer = vbAbort ThenMsgBox "Abortar"ElseIf answer = vbRetry ThenMsgBox "Tentar novamente"OutroMsgBox "Ignorar"Fim seEnd Sub |
Nova tentativa de cancelar a caixa de mensagem - vbRetryCancel
123456789101112 | Sub MsgBox_RetryCancel ()Dim answer As Integeranswer = MsgBox ("Exemplo de cancelamento de nova tentativa", vbRetryCancel)Se answer = vbRetry ThenMsgBox "Tentar novamente"OutroMsgBox "Cancelar"Fim seEnd Sub |
Exemplos de VBA MessageBox
Confirmação da caixa de mensagem antes de executar a macro
Este código exibirá uma caixa de mensagem Sim Não antes de chamar uma macro. Se clicar em Sim, a macro será chamada; se clicar em Não, a macro não será executada.
12345678 | Sub Msgbox_BeforeRunning ()Dim answer As Integeranswer = MsgBox ("Deseja executar Macro1?", vbQuestion + vbYesNo)Se a resposta = vb Sim, então chame a Macro1End Sub |
Sim / Não Message Box - Exit Sub
Aqui, confirmaremos com o usuário se deseja continuar executando uma macro. Se clicar em Não, o código sairá do sub, caso contrário, o procedimento continuará.
12345678910 | Sub Msgbox_BeforeRunning ()Dim answer As Integeranswer = MsgBox ("Deseja continuar?", vbQuestion + vbYesNo)Se answer = vbNo Then Exit Sub'Algum códigoEnd Sub |
VBA Message Box no Access VBA
Todos os exemplos acima funcionam exatamente da mesma forma no Access VBA e no Excel VBA.