VBA – Confirmando decisões com o MsgBox (VbMsgBoxResult)

Introdução

O VBA disponibiliza uma forma de emitir mensagens personalizadas para o usuário através da função MsgBox, permitindo incluse alterar uma série de suas configurações.

Desta vez, analisaremos uma das características da MsgBox que é analisar seu retorno, que é informado pelo usuário o clicar em um dos botões disponíveis na caixa de mensagem. este recurso é útil quando se deseja fazer questões aos usuários. A resposta da questão virá da opções oferecidas a ele pelo MsgBox.

Começaremos sabendo como analisar o retorno da MsgBox. Veja o código de exemplo:

1
2
3
4
5
Public Sub TesteMsgBox()
     Dim resultado As VbMsgBoxResult
     resultado = MsgBox("Testando o VbMsgBoxResult!", vbOKOnly, "Testando o MsgBox")
     MsgBox resultado
End Sub

O resultado da execução do código serão duas caixas de mensagem na seguinte sequência (clicando em OK em cada uma delas):

ajkbsmpbw67f_40cmg98f3c

ajkbsmpbw67f_41dh5q39fm

O que valor notar aqui é o seguinte. Pelo fato de termos informado o parâmetro Button como vbOkOnly, o único botão oferecido ao usuário foi o botão OK, o resultado não poderia sido outro que não um. Vamos relembrar a tabela de valores retornados pelo MsgBox:

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

Segundo a tabela, ao acionar o botão OK, o usuário está informando ao VBA um tipo de retorno com o valor 1 que correnpondente à contante vbOK. Vamos mudar o parâmetro Button para vbYesNo e verificar a execução do código:

1
2
3
4
5
Public Sub TesteMsgBox()
     Dim resultado As VbMsgBoxResult
     resultado = MsgBox("Testando o VbMsgBoxResult!", vbYesNo, "Testando o MsgBox")
     MsgBox resultado
End Sub

O resultado:

ajkbsmpbw67f_42dzkmn5cq

Note que mais opções foram oferecidas ao usuário. Agora clique no botão Sim para ver o que acontece com o retorno:

ajkbsmpbw67f_43gs3jr4gm

Na tabela de Valores retornado, podemos conferir que o valor 6 se refere à contante vbYes. Execute a função novamente, só que desta vez, clique na opção Não:

ajkbsmpbw67f_44d37tqtg4

Na tabela de Valores retornado, podemos conferir que o valor 7 se refere à contante vbNo.

Desta forma, conseguimos um meio que questionar o usuário e facilmente oferecer-lhe opções a respeito desta questão e analisar suas resposta. Experimente alterar o parâmetro Button da chamada ao MsgBox e veja o resultado informado.

Tornando o Recurso Útil

Vimos que é possível oferecer ao usuário uma série de alternativas de escolha em conjunto a uma mensagem com o MsgBox. Veremos agora um exemplo simples de como analisar o retorno da função MsgBox para tomar decisões nos aplicativos VBA.

Veja o seguinte trecho de código:

1
2
3
4
5
6
7
8
9
Public Sub TesteVbMsgBoxResult()
     Dim resultado As VbMsgBoxResult
     resultado = MsgBox("Tem certeza que deseja prosseguir com esta ação?", vbYesNo, "Tomando uma decisão")
     If resultado = vbYes Then
          MsgBox "Você acaba de confirmar a ação"
     Else
          MsgBox "Você acaba de recusar a ação"
     End If
End Sub

Veja que não é necessário gravar ou mesmo analisar o valor numérico do retorno do MsgBox. O VBA disponibiliza as constantes nomeadas, como vbYes, vbNo, vbOK para que seja possível fazer uma produção e leitura mais organizada do código.

Na linha 6, é declarada a variável resultado do tipo VbMsgBoxResult que armazenará o resultado da MsgBox. Na linha 4 acontece a chamada à MsgBox. Quando o usuária clicar em uma das opções mostrada, o VBA armazenará o retorno na variável resultado.

Em seguida, usa-se a estrutura If…Then…Else para avaliar o resultado da função. Veja que a comparação é feita com a contante vbYes. Como o código deseja confirmar a ação do usuário, este analisa o resultado de mostra a mensagem pertinente, Veja o resultado da execução do código:

ajkbsmpbw67f_45gzg6g4dv

Ao clicar no botão Sim, o seguinte resultado é mostrado:

ajkbsmpbw67f_46cwz3shhc

Como o resultado do MsgBox ao clicar no boatão sim é o valor de vbYes, o código executa a mensagem da linha 5.

Se executar o código novamente e clicar no botão Não, o resultado será:

ajkbsmpbw67f_47f7gc97fs

Desta vez, a linha executada pelo código foi a de número 7.

Com estes recursos, é possível oferecer o usuário praticamente todos os tipos de opção disponibilizados pelo Microsoft Windows em todas as situações. Você pode oferecer opções como Anular/Repetir/Ignorar, Sim/Não/Cancelar, entre outras.

Comentários

Vimos que o MsgBox oferece mais recurso além da simples exibição de mensagens. Tendo conhecimento de todos as possibilidades da função, você terá em mãos uma poderosa ferramenta para resolver praticamente todas as situações de decisçao que surgirem no desenvolvimento de seus aplicativos.

Comentários

comentários

10 thoughts on “VBA – Confirmando decisões com o MsgBox (VbMsgBoxResult)”

  1. Olá Tomás,

    excelente dica muito obrigada por disponibilizá-la.

    Queria te pedir mais uma informação. Queria inserir uma caixa de mensagem do tipo yes ou no, antes da execução de uma macro em access. Queria que o resultado para ação yes do usuário fosse continuar a macro e para o caso de no interromper a macro sem executá-la.

    Vc poderia me informar qual o comando para as duas ações.

    Muito obrigada
    Andréa

  2. Andréa,

    O funcionamento da rotina no VBA em Excel ou Access é idêntica. Quanto ao que você pediu, vai do fluxo da execução da macro. Uma instrução If deve resolver o problema. Há alguma dúvida nisso?

    Abraços
    Tomás

  3. ola Tomás , primeiramente , parabens pelo trabalho … é simplismente fantastico todas as dicas apresentadas !
    agora , minha duvida é : o que fazer para confirmar a alteração atraves de msgbox , detalhe : apenas ativar a macro quando a alteração for na colula J

  4. Muito Obrigado,
    As vezes pequenas rotinas como citado acima uma mensagem de confirmação, parece não importante, mas no meu caso eu utiliza macros para sair do sistema, implementei conforme você ensinou e deu Certo, e para mim ja ganhei o dia.

    Parabéns

  5. Olá Tomás,
    Fiz exatamente o que você indicou no exemplo, porém quando eu coloco não eu gostaria que a macro não continuasse, interrompesse a ação. como se fosse validação
    SIM = vou executar a MACRO
    Não = Não será executada a MACRO

    Consigo fazer isso??

    Muito Obrigado

  6. Olá Tomás,
    Eu não entendi, é esse post mesmo? está falando algo de Access.

    O que eu preciso é exatamente o que você demostrou nesse post acima, porém que a Macro seja interrompida quando clicado no NÃO.
    Você tem algum exemplo desse??

    Muito Obrigado pela ajuda que nos dá e a atenção também
    Parabéns.

  7. Rafael,

    O post se refere a linguagem de programação VBA e todos os aplicativos que a suportam, inclusive o Access. Quanto a sua dúvida, a resposta está no post:

    Public Sub SaiDoFluxo()
    'faz algo aqui
    If Msgbox("Tem certeza?", YesNo, "Dúvida") = vbYes Then
    'continua
    Else
    Exit Sub 'aqui estou saindo da função
    End If
    'faz mais algo aqui
    End Sub

    Abraços

Comments are closed.