VBA – Emitindo mensagens personalizadas com MsgBox
O que é?
A função MsgBox exibe uma caixa de mensagem ao usuário e aguarda com que o
usuário clique em um de seus botões para que esta seja fechada.
A estrutura de chamada à função MsgBox se faz da seguinte forma:
MsgBox([prompt][, buttons] [, title] [, helpfile, context]) As VbMsgBoxResult
Prompt
Obrigatória. Expressão de seqüência de
caracteres exibida como mensagem na caixa de
diálogo. O comprimento máximo de prompt é de aproximadamente 1.024
caracteres, dependendo da largura dos caracteres utilizados. Se prompt consistir em mais de uma linha, você poderá separar as linhas utilizando um
caractere de retorno de carro (Chr(13)), um caractere de
alimentação de linha (Chr(10)) ou uma combinação de caracteres
de retorno de carro e alimentação de linha (Chr(13) & Chr(10)) entre cada linha.
Buttons
Opcional. Expressão
numérica que é a soma de valores que especifica o
número e o tipo de botões a exibir, o estilo de ícone a utilizar, a identidade
do botão padrão e a modalidade da caixa de mensagem. Se omitido, o valor
padrão para buttons é 0.
Title
Opcional. Expressão de seqüência de caracteres exibida
na barra de título da caixa de diálogo. Se você omitir title, o nome do
aplicativo será inserido na barra de título.
Helpfile
Opcional. Expressão de seqüência de caracteres que
identifica o arquivo de Ajuda a ser utilizado para fornecer ajuda
sensível ao contexto relativa à caixa de diálogo. Se helpfile for
fornecido, context também deverá ser fornecido.
Context
Opcional. Expressão numérica que é o número de
contexto da Ajuda atribuído ao tópico da Ajuda apropriado por
seu autor. Se context for fornecido, helpfile também deverá ser
fornecido.
Definições
As definições do argumento buttons são as seguintes:
| Constante | Valor | Descrição |
|---|---|---|
| VbOKOnly | 0 | Exibe somente o botão OK. |
| VbOKCancel | 1 | Exibe os botões OK e Cancelar. |
| VbAbortRetryIgnore | 2 | Exibe os botões Abortar, Repetir e Ignorar. |
| VbYesNoCancel | 3 | Exibe os botões Sim, Não e Cancelar. |
| VbYesNo | 4 | Exibe os botões Sim e Não. |
| VbRetryCancel | 5 | Exibe os botões Repetir e Cancelar. |
| vbCritical | 16 | Exibe o ícone Mensagem crítica. |
| vbQuestion | 32 | Exibe o ícone Consulta de aviso. |
| vbExclamation | 48 | Exibe o ícone Mensagem de aviso. |
| vbInformation | 64 | Exibe o ícone Mensagem de informação. |
| vbDefaultButton1 | 0 | O primeiro botão é o padrão. |
| vbDefaultButton2 | 256 | O segundo botão é o padrão. |
| vbDefaultButton3 | 512 | O terceiro botão é o padrão. |
| vbDefaultButton4 | 768 | O quarto botão é o padrão. |
| vbApplicationModal | 0 | Janela restrita do aplicativo; o usuário deve responder à caixa de mensagem antes de continuar o trabalho no aplicativo atual. |
| vbSystemModal | 4096 | Janela restrita de sistema; todos os aplicativos são suspensos até que o usuário responda à caixa de mensagem. |
| vbMsgBoxHelpButton | 16384 | Adiciona o botão ‘Ajuda’ à caixa de mensagens |
| VbMsgBoxSetForeground | 65536 | Especifica a janela da caixa de mensagens como a janela de primeiro plano |
| vbMsgBoxRight | 524288 | O texto é alinhado à direita |
| vbMsgBoxRtlReading | 1048576 | Especifica que o texto deve aparecer como leitura da direita para a esquerda em sistemas hebraico e árabe |
O primeiro grupo de valores (0 a 5) descreve o número e o tipo de botões
exibidos na caixa de diálogo; o segundo grupo (16, 32, 48, 64) descreve o
estilo de ícone; o terceiro grupo (0, 256, 512) determina qual botão é o
padrão e o quarto grupo (0, 4.096) determina a modalidade da caixa de
mensagem. Quando estiver somando números para criar um valor final para o
argumento buttons, utilize somente um número de cada grupo.
Observação Essas constantes são especificadas pelo
Visual Basic for Applications. Como resultado, os nomes podem ser utilizados
em qualquer lugar do seu código em vez dos valores reais.
Como o MsgBox é uma Função (Function), é possível capturar o
valor retornado conforme a ação do usuário.
Valores retornados
| Constante | Valor | Descrição |
|---|---|---|
| vbOK | 1 | OK |
| vbCancel | 2 | Cancelar |
| vbAbort | 3 | Abortar |
| vbRetry | 4 | Repetir |
| vbIgnore | 5 | Ignorar |
| vbYes | 6 | Sim |
| vbNo | 7 | Não |
Exemplo
Apesar do grande número de opções e parâmetro oferecidos pelo MsgBox,
vamos nos concentrar em sua funcionalidade mais simples neste momento, que é
emitir mensagens ao usuários. Veja este exemplo de código abaixo:
1 2 3 | Public Sub TesteMsgBox() MsgBox "Seja bem vindo ao Microsoft Excel!" End Sub |
Execute a função e terá o seguinte resultado:
Na código de exemplo, apenas o primeiro parâmetro é informado, o suficiente
para fazer uso de mensagens simples. Porém é possível personalizar ainda mais
a caixa de mensagem conforme mostra o próximo código de exemplo:
1 2 3 | Public Sub TesteMsgBox() MsgBox "Seja bem vindo ao Microsoft Excel!", vbInformation, "Testando o MsgBox" End Sub |
Note que mais dois parâmetros foram informados, o parâmetro Button e Title. Execute a função e terá o seguinte resultado:
O parâmetro Title permitiu alterar o título da MsgBox, enquanto
o parâmetro Button alterou o contexto da informação. Como foi informado
que o botão a ser mostrado seria do tipo vbInformation, um ícone de
informação foi adicionado ao caixa e mensagem. Outro tipos de Buttons podem
ser utilizadas, que geraram diferentes ícones, conjunto de botões, alterando
inclusive o som que é executado ao mostrar a caixa. Claro que o ideal é sempre
colocar uma mensagem que esteja de acordo com o contexto. Veja a diferença da
aparência se mudar o parâmetro para o seguinte:
1 2 3 | Public Sub TesteMsgBox() MsgBox "Ocorreu algum erro!", vbCritical, "Testando o MsgBox" End Sub |
O resultado da execução do código será a seguinte:
Note a mudança do ícone e do som emitido pelo aplicativo. A mensagem também
foi alterada para refletir a contexto do ícone utilizado.
Comentários
Como o MsgBox é uma função (Function), sua execução retorna um
valor que é do tipo VbMsgBoxResult. Quando se utiliza alguns tipos
especiais de parâmetros Button, este retorna nos dá uma alternativa de
analisar a decisão do usuário com base no retorno do MsgBox.
Quando helpfile e context são fornecidos, o
usuário pode pressionar F1 (Windows) ou AJUDA (Macintosh) para visualizar o
tópico de Ajuda que corresponde ao context. Alguns
aplicativos host, por exemplo, o Microsoft Excel, também adicionam
automaticamente um botão Ajuda à caixa de diálogo. Se o usuário clicar
em OK ou pressionar , a função InputBox retornará o que estiver
na caixa de texto. Se o usuário clicar em Cancelar, a função retornará
uma seqüência de caracteres de comprimento zero (“”).
Observação Para especificar mais que o primeiro
argumento nomeado, você deve utilizar InputBox em uma expressão. Para
omitir alguns argumentos posicionais, você deve incluir o delimitador de
vírgula correspondente.
Pratique!
Caso não consiga abrir os arquivos, clique nos links com o botão direito do
mouse e escolha “salvar como”.




74 Convidados
2 Bots
fevereiro 9th, 2009 at 20:07
Parabéns!!! Pode me ajudar em algo? Como faço para que ao selecionar qualquer célula, de uma determinada coluna, apareça uma mensagem?
Obrigado
fevereiro 10th, 2009 at 17:30
Obrigado Leandro,
Quanto a sua dúvida, mapeie o evento Worksheet_SelectionChange e através do parâmetro target, verifique se o usuário navegou pela coluna que deseja e emita a mensagem conforme mostra o artigo.
Abraços
Tomás
março 12th, 2009 at 9:44
Olá Tomás.
Primeiramente gostaria de parabenizar-lhe pelo material, está ótimo! Bem tenho uma dúvida:
Consegui criar a Caixa de Diálogo; Todavia, quero que, se o usuário pressionar o botão “Ok”, o excel execute algo (excluir uma linha de uma planilha, “Selection.EntireRow.Delete”), e se ele pressionar o Botão “Cancelar”, o excel pare de executar a macro.
Como Faço?
Desde já agradeço,
Willy Freitas
março 13th, 2009 at 10:29
Willy,
Creio que a resposta esteja neste post:
http://www.tomasvasquez.com.br/blog/microsoft-office/vba-confirmando-decisoes-com-o-msgbox-vbmsgboxresult
Espero que ajude.
Abraços
Tomás
maio 13th, 2009 at 14:36
Olá Tomás. Parabéns! Esse material é muito bom e está me quebrando um grande galho aqui. Só precisava saber se vc podia me ajudar na seguinte questão: Como faço para que o MsgBox me informe o valor que está lançado em uma determinada célula?
Estou criando um cadastro de materiais, sendo que tenho uma coluna com os números de cadastro pré criados, e a descrição do material é colado ao lado desses números via macro, que copia de uma tela de entrada dessas informações. Eu queria que a macro retornasse uma message box informando o código desse material transferido pro banco de cadastros. Ou seja “O material foi cadastrado sob o nº & (informação da célula selecionada).
Desde já agradeço. Abs.
Jackson
maio 14th, 2009 at 10:27
Jackson,
Existem várias formas de capturar o conteúdo da célula. O mais “simples” é pelo seu endereço direto, por exemplo:
Planilha.Range(“A1″).Value
Não vou entrar no mérito aqui, mas no seu caso ficaria algo como:
MsgBox “O material foi cadastrado sob o nº ” & Plan1.Range(“A100″).Value
Isso deve ajudar.
Abraços
Tomás
maio 14th, 2009 at 15:40
Ótimo, valeu. Isso deve me ajudar sim. Pelo que entendi é exatamente “MsgBox “O material foi cadastrado sob o nº ” & Plan1.Range(”A100″).Value” o que eu preciso. Eu nunca tinha usado MsgBox e nem InputBox, então tava bem perdido nisso. Obrigado.
junho 22nd, 2009 at 8:55
Bom dia,estive navegando na net e percei que você tem didática…
Seria possível uma ajuda? Caso sim, este é o meu problema:
Tenho uma planilha que recebe valores diariamente. Como criar uma msgbox para informar à cada sexta-feira (soma da semana) que a cota semanal foi ou não atendida?
Obrigado,
Alberto Gonzalez.
junho 22nd, 2009 at 15:11
Alberto,
Nesse caso temos vários problemas a resolver.
Como identificar que o dia é sexta-feira?
Emitir uma MsgBox de mensagem (resolvido neste artigo)
Quando a mensagem deve ser emitida?
Em qual condição?
E melhor resolver um de cada vez para não tornar a resposta complexa demais para qualquer um formular.
Abraços
Tomás
julho 25th, 2009 at 13:31
Por gentileza meu amigo, gostaria de saber se existe alguma maneira de extrair um texto de uma celuna (Plan1.Range(”A100″).Value) mais ao invéz de ser mostrado em uma MSGBOX gostaria que fosse mostrado em um comentario. Será que seria possivel?
Desde já agradeço a ajuda e as excelentes dicas. um abraço.
julho 25th, 2009 at 19:11
Adriano,
Sim, é, mas em que tipo de comentário? Você diz em um cometário de célula?
Abraços
Tomás
outubro 5th, 2009 at 14:08
Tomás, boa tarde.
Primeiramenta, parabéns pelo excelente trabalho!
Preciso de uma ajuda, quero que uma MsgBox seja executada quando a planilha for salva. A msgbox já esta pronta, só não sei o código que devo usar para liga-la ao “salvar” do excel.
Obrigado!
outubro 5th, 2009 at 14:44
Guilherme,
Veja a resposta no fórum:
http://www.tomasvasquez.com.br/forum/viewtopic.php?f=2&t=22&p=94#p94
Abraços
outubro 5th, 2009 at 14:54
Tomás, mais uma vez obrigado.
O código funcionou perfeitamente!
Boa tarde.
outubro 9th, 2009 at 12:12
Tomás, bom dia.
Mais uma vez preciso da sua ajuda.
Tenho uma planilha muito grande, com uma quantidade enorme de valores, alguns interagindo em operações simples como soma e divisão. Meu problema é que em alguns casos ocorrem erros nesses cálculos por conta da divisão com zero no numerador ou denominador. Gostaria de um código que transformasse as mensagens de erro que aparecem nas células, em “0″ (zero). É possível? Seria só alterar o valor da célula de “#DIV/0!” pelo número zero.
Muito obrigado pela ajuda mais uma vez!
Guilherme
outubro 9th, 2009 at 16:17
Guilherme,
Fórum please:=> http://www.tomasvasquez.com.br/forum
Abraços
Tomás
dezembro 1st, 2009 at 16:44
Isso vai me ajudar bastante.
vlw cara!
dezembro 11th, 2009 at 17:31
Como colocar uma condição na minha menssagem tipo: tenho uma planilha que controla manutenções quero informar a data da próxima manutenção e no dia receber a menssagem .
dezembro 11th, 2009 at 21:35
Tiago,
Seria isso?
http://www.tomasvasquez.com.br/blog/microsoft-office/excel-vba-if-then-else
Abraços
Tomás
janeiro 13th, 2010 at 20:17
Muito bom.
maio 21st, 2010 at 11:49
Tomás, bom dia.
Tenho o seguinte código:
Private Sub worksheet_change(ByVal target As Range)
If target.Row = 9 And target.Column = 40 Then
imgfoto.Picture = LoadPicture(Range(“PROCFOTO”).Value)
End If
End Sub
Gostaria de, quando não houver arquivo com a foto, seja emitida uma mensagem “foto indisponível” e que, quando ocorresse essa situação, a caixa de imagem ficasse sem nenhuma foto (quando ocorre o erro, a última foto acessada continua aparecendo.
Obrigado,
Eduardo
maio 21st, 2010 at 12:39
Eduardo,
Como a quantidade de dúvidas que são enviadas é grande, abri um fórum para melhor atender a estas solicitações. O endereço do fórum é:
http://www.tomasvasquez.com.br/forum
Além disso, a probabilidade de alguém ter tido o mesmo problema e de ele estar resolvido é bem grande. Nos vemos lá!
Abraços
Tomás
junho 26th, 2010 at 7:29
amigo, bom dia ! Eu preciso de sua ajuda, se for possível.
estou usando o msgbox para obter confirmação de usuário para salvar ou não um registro em formulário do access. sou principiante.
Estou usando o vbYesNo, mas preciso que seja exibido Sim e Não ao invés de Yes e No nos botões de confirmação. Isto tem solução ? Grata pela ajuda se for possível
junho 26th, 2010 at 10:04
Magali,
Se isso não resolver:
http://www.tomasvasquez.com.br/blog/microsoft-office/vba-confirmando-decisoes-com-o-msgbox-vbmsgboxresult
Vamos tentar resolver no fórum:
http://www.tomasvasquez.com.br/forum
Nos vemos lá!
agosto 4th, 2010 at 9:12
Bom dia Tomas, como fazer que a Msgbox apareça ao abrir a planilha?
Obrigada
agosto 4th, 2010 at 9:35
Viviane,
Veja se ajuda:
http://www.tomasvasquez.com.br/blog/microsoft-office/vba-auto-executando-macros-ao-abrir-arquivos-do-office
Mais dúvidas:
http://www.tomasvasquez.com.br/forum
Abraços
Tomás
agosto 4th, 2010 at 9:49
Ficou perfeito. Muito obrigada
agosto 11th, 2010 at 8:44
Bom dia Tomás,
Parabéns pelo material está muito bom mesmo.
Tenho uma situação aqui no trabalho que preciso fazer, para que o usuário apenas possa responder a msgbox e não utilize outro recurso do sistema.
O msgbox tem ki ficar travado e esperando a resposta dele(usuário).
Se puder me ajudar agradeço.
Obrigado!
agosto 11th, 2010 at 12:11
Glauber,
Não entendi a dúvida. No caso, seria melhor discutirmos no fórum:
http://www.tomasvasquez.com.br/forum
Abraços
Tomás
janeiro 9th, 2011 at 16:06
[...] VBA – Emitindo mensagens personalizadas com MsgBox [...]