TOP

VBA-Lección 10. Cuadros de diálogo (Dialog boxes)

YouLibreCalc for Excel logo

Los cuadros de diálogo (Dialog Boxes) en Excel VBA se utilizan para mostrar información al usuario.

La función MsgBox muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un número entero que indica en qué botón hizo clic el usuario.

El cuadro de diálogo más común utilizado es el cuadro de mensaje, pero también podemos usar el cuadro de entrada.


MsgBox

Hasta ahora, hemos utilizado el cuadro de diálogo MsgBox para mostrar información en la pantalla.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "¡El contenido de la celda B2 ha sido eliminado!"
End Sub

En este caso, se llama a MsgBox con un solo argumento. Ver código a continuación:

Ahora crearemos un cuadro de diálogo que pedirá confirmación para eliminar antes de que se ejecuten las dos instrucciones. Entonces hay tres argumentos que usaremos:

MsgBox([TEXTO], [BOTONES], [TÍTULO])
  • Texto: texto del cuadro de diálogo
  • Botones: selección de botones (sí, no, cancelar, etc.) + otras opciones
  • Título: el título del cuadro 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 "celda vacia"
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "valor no numérico"
        End If
    End Sub
    

    vbYesNo especifica que los botones de diálogo son "Yes" y "No", y vbYes representa el botón "Yes":

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Si se presiona el botón Yesbl_...
    

    Opciones para usar el segundo argumento en MsgBox

    ConstanteNumérico ValueDescripción
    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

    Ejemplo de uso del segundo argumento en MsgBox

    Aquí hay un ejemplo MsgBox que continuará mostrándose cada vez en el bucle hasta que el usuario presione Yes:

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> Respuesta Yes = Sí, salimos del bucle
            End If
        Loop While 1 = 1 '=> Bucle sin fin
        MsgBox ";-)"
    End Sub
    

    Para mostrar una nueva cinta, puede usar la función Chr con un argumento de 10, que se encarga de mover la cinta, por ejemplo:

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

    Obtenemos el siguiente resultado:

    Cuadro de entrada

    Un InputBox solicita al usuario que ingrese un valor en un cuadro de diálogo, por ejemplo:

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") 'A la variable se le asigna el valor ingresado en el InputBox
       
        If result <> "" Then 'Si el valor es cualquier cosa menos "", entonces se mostrará el resultado
           MsgBox result
        End If
    End Sub
    

    Obtenemos el siguiente resultado:

    El tercer argumento se puede utilizar para establecer el valor predeterminado:

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

    El resultado es el siguiente: