TOP

VBA-Lição 10. Caixas de diálogo (caixas de diálogo)

As caixas de diálogo (Dialog Boxes) em Excel VBA são usadas para exibir informações ao usuário.

A função MsgBox exibe uma mensagem em uma caixa de diálogo e espera o usuário clicar em um botão e, em seguida, retorna um número inteiro indicando em qual botão o usuário clicou.

A caixa de diálogo mais comum é a Caixa de Mensagens, mas também podemos usar a Caixa de Entrada.


MsgBox

Até agora, usamos a caixa de diálogo MsgBox para exibir informações na tela.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  '"O conteúdo da célula B2 foi excluído!"
End Sub

Neste caso MsgBox é chamado com apenas um argumento. Ver código abaixo:

Agora criaremos uma caixa de diálogo que solicitará a confirmação da exclusão antes que as duas instruções sejam executadas. Então, há três argumentos que usaremos:

MsgBox([TEXT], [BUTTONS], [TITLE])
  • TEXT: texto da caixa de diálogo
  • BUTTONS: seleção de botões (sim, não, cancelar, etc.) + outras opções
  • TITLE: título da caixa de diálogo
  • Sub delete_B2()
    
        If MsgBox("Are you sure that you wish to delete the contents of B2 ?", vbYesNo, "Confirm") = vbYes
        Then
          Range("B2").ClearContents
          MsgBox "The contents of B2 have been deleted !"
        End If
        
    End Sub
    

    Resultado:

    Private Sub warning(var_text As String)
        MsgBox "Caution : " & var_text & " !"
    End Sub
    
    Sub macro_test()
        If Range("A1") = "" Then
            warning "empty cell"           '"célula vazia"
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "non-numerical value"  '"valor não numérico"
        End If
    End Sub
    

    vbYesNo especifica que os botões de diálogo são "Yes" e "No", e vbYes representa o botão "Yes":

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Se o botão Yes for pressionado...
    

    Opções para usar o segundo argumento em MsgBox

    Constante Valor numérico Descrição
    vbOKOnly0ok - dialog boxes
    vbOKCancel1ok - dialog boxescancel - dialog boxes
    vbAbortRetryIgnore2abort - dialog boxesretry - dialog boxesignore - dialog boxes
    vbYesNoCancel3yes - dialog boxesno - dialog boxescancel - dialog boxes
    vbYesNo4yes - dialog boxesno - dialog boxes
    vbRetryCancel5retry - dialog boxescancel - dialog boxes
    vbCritical16critical - dialog boxes
    vbQuestion32question - dialog boxes
    vbExclamation48exclamation - dialog boxes
    vbInformation64information - dialog boxes

    Exemplo de uso do segundo argumento em MsgBox

    Aqui está um exemplo MsgBox que continuará a ser exibido sempre no loop até que o usuário pressione Yes:

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> Response Yes = Sim, saímos do loop
            End If
        Loop While 1 = 1 '=> Loop infinito
        MsgBox ";-)"
    End Sub
    

    Para exibir uma nova faixa de opções, você pode usar a função Chr com argumento 10, responsável por mover a faixa de opções, por exemplo:

    MsgBox "Example 1" & Chr(10) & "Example 2" & Chr(10) & Chr(10) & "Example 3"
    

    Obtemos o seguinte resultado:

    Caixa de entrada

    Uma InputBox solicita que o usuário insira um valor em uma caixa de diálogo, por exemplo:

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") 'A variável recebe o valor inserido no InputBox
       
        If result <> "" Then 'Se o valor for qualquer coisa, menos "", o resultado será exibido
           MsgBox result
        End If
    End Sub
    

    Obtemos o seguinte resultado:

    O terceiro argumento pode ser usado para definir o valor padrão:

    InputBox("Text ?", "Title", "Default value")
    

    O resultado é o seguinte: