VBA – Caja de Mensajes (Msgbox)
In this Article
Este tutorial cubrirá cómo usar la función MsgBox de VBA para mostrar cuadros de mensaje a los usuarios (incluyendo el cuadro de mensaje YesNo). También puede interesarle nuestro artículo sobre InputBoxes.
Función VBA MsgBox
En VBA, es fácil mostrar un simple MsgBox:
MsgBox "Este es un cuadro de mensaje"
Sin embargo, puedes hacer mucho más que mostrar un simple cuadro de mensaje Aceptar. Veamos rápidamente un ejemplo complicado antes de entrar en detalles…
Cuadro de mensaje VBA YesNo
A continuación crearemos un cuadro de mensaje con:
- Un título «Título de la caja de mensajes» y un mensaje «Texto»
- Un icono de signo de interrogación
- Opciones Sí / No en lugar de un simple «OK»
- Botón por defecto = ‘No’
Sub CuadroDeMensajesOpciones()
Dim respuesta As Integer
respuesta = msgbox("Texto", vbQuestion + vbYesNo + vbDefaultButton2, "Titulo del mensaje")
End Sub
El messagebox devolverá vbSí o vbNo dependiendo de la elección del usuario. A continuación, puede realizar diferentes acciones basadas en la elección:
If respuesta = vbYes Then
msgbox "Si"
Else
msgbox "No"
End If
En la siguiente sección le mostraremos todas las opciones disponibles para crear cuadros de mensaje. Luego le presentaremos la sintaxis de la función MsgBox y finalmente repasaremos otros ejemplos de cuadros de mensaje.
Opciones de los cuadros de mensaje VBA
Observe la siguiente imagen. Aquí verá (casi) todas las opciones disponibles para crear cuadros de mensaje. Fíjate en los iconos y en los diferentes botones. Esta es una captura de pantalla del «MessageBox Builder» de nuestro complemento VBA Premium:AutoMacro. El Constructor de MessageBox le permite diseñar rápidamente su cuadro de mensaje deseado e insertar el código en su módulo de código. También contiene muchos otros constructores de código, una extensa biblioteca de código VBA, y un surtido de herramientas de codificación. Es una herramienta imprescindible para cualquier desarrollador de VBA.
Sintaxis de la función MsgBox
MsgBox( prompt [, botones ] [, título ] [, helpfile, contexto ] )
- prompt(Requerido) – Este es el texto principal del cuadro de mensaje.
- buttons – Elija qué botones mostrar. Si se omite, ‘OKonly’. Aquí también puede especificar qué icono mostrar y el botón por defecto.
- título – El título que aparece en la parte superior del cuadro de mensajes. Si se omite, se muestra el nombre de la aplicación actual (por ejemplo, Microsoft Excel).
- helpfile – Especifica el archivo de ayuda al que se puede acceder cuando el usuario hace clic en el botón «Ayuda». Si se especifica, también hay que añadir el contexto (abajo)
- context – Expresión numérica que representa el número de contexto de ayuda asignado al tema de ayuda correspondiente. Probablemente puede ignorar los argumentos helpfile y context. Nunca he visto que se utilicen.
Personalizar el título y el mensaje de la caja de mensajes
La función MsgBox le permite personalizar el título y el aviso de los mensajes de la siguiente manera
Msgbox "Mensaje",, "Título"
Otro ejemplo:
Sub CuadrodeMensajeAvisoTitulo()
msgbox "Paso 1 completado. Haga clic en OK para ejecutar el paso 2.", , "Paso 1 de 5"
End Sub
¡Importante! Debe recordar rodear su texto con comillas.
Saltos de línea en MessageBox
También puede añadir saltos de línea a sus mensajes con ‘vbNewLine’.
Sub CuadrodeMensajeConSaltosDeLinea()
msgbox "Paso 1 completado." & vbNewLine & "Haga clic en Aceptar para ejecutar el Paso 2.", , "Paso 1 de 5"
End Sub
Observe que utilizamos el símbolo & para unir el texto. Puede aprender más sobre el uso de & con texto y otras opciones para insertar saltos de línea en nuestro artículo sobre la unión de texto.
Iconos MsgBox
VBA le ofrece la posibilidad de añadir uno de los cuatro iconos preconstruidos a sus cuadros de mensaje:
Icono Constante | Icono |
---|---|
vbInformación | |
vbCrítico | |
vbPregunta | |
vbExclamación |
La constante Icon debe ser colocada dentro del argumento del botón:
Sub CuadrodeMensajeTipoDeIcono()
msgbox "Pregunta de ejemplo", vbQuestion
End Sub
Esto generará el cuadro de mensaje ‘OK’ por defecto con el icono de la pregunta:
Observe cómo al escribir, el Editor VBA le mostrará las opciones disponibles:
Esto es útil porque no necesita recordar la sintaxis exacta o los nombres de los iconos o botones. Ahora demostraremos cada icono de la caja de mensajes:
Iconos de MsgBox – Información
Sub MsgBoxIconoDeInformacion()
msgbox "Ejemplo de Información", vbInformation
End Sub
Iconos MsgBox – Críticos
Sub MsgBoxIconoCritico()
msgbox "Ejemplo Aviso Crítico", vbCritical
End Sub
Iconos MsgBox – Pregunta
Sub MsgBoxIconoPregunta()
msgbox "Ejemplo de pregunta", vbQuestion
End Sub
Iconos MsgBox – Exclamación
Sub MsgBoxIconoExclamacion()
msgbox "Ejemplo de Exclamación", vbExclamation
End Sub
A continuación hablaremos de la generación de cuadros de mensaje con diferentes diseños de botones. Si elige un tipo de cuadro de mensaje diferente, tendrá que añadir el tipo de icono después de los botones utilizando un «+»:
Sub MsgBoxIconoDePreguntaCompuesto()
msgbox "¿Desea continuar?", vbOKCancel + vbQuestion
End Sub
Variables de MsgBox
Hasta ahora hemos trabajado principalmente con el cuadro de mensaje ‘OK’ por defecto. El cuadro de mensaje OK sólo tiene una opción: Pulsar ‘OK’ permite que el código continúe. Sin embargo, también puede especificar otras agrupaciones de botones: Aceptar / Cancelar, Sí / No, etc. En cuyo caso querrá realizar diferentes acciones en función del botón que se pulse. Veamos un ejemplo. Este es el cuadro de mensaje que generaremos:
Este es el código completo (lo desglosaremos a continuación):
Sub MsgBoxVariable()
Dim respuesta As Integer
respuesta = msgbox("¿Quiere continuar?", vbQuestion + vbYesNo)
If respuesta = vbYes Then
msgbox "Sí"
Else
msgbox "No"
End If
End Sub
Primero asignamos la salida de la caja de mensajes a una variable entera.
Dim respuesta As Integer
respuesta = msgbox("¿Quiere continuar?", vbQuestion + vbYesNo)
A continuación utilizamos un If-Else para determinar qué hacer en función del botón que se pulse:
If respuesta = vbYes Then
msgbox "Sí"
Else
msgbox "No"
End If
La función MsgBox devuelve un valor entero (entre 1-7) por lo que definimos la variable como de tipo entero. Sin embargo, en lugar de referirse al número entero, puede referirse a una constante (ej. vbOK, vbCancel, etc.). Mira esta tabla para ver todas las opciones:
Botón | Constante | Valor |
---|---|---|
OK | vbOK | 1 |
Cancelar | vbCancelar | 2 |
Abortar | vbAbort | 3 |
Reintentar | vbRetry | 4 |
Ignorar | vbIgnore | 5 |
Sí | vbYes | 6 |
No | vbNo | 7 |
Ahora haremos una demostración de cada agrupación de botones:
Cuadro de mensaje OK – vbOKOnly
Esta es la caja de mensajes estándar de VBA.
Sub MsgBox_Solo_OK()
Dim respuesta As Integer
respuesta = msgbox("Ejemplo de OK Solo", vbOKOnly)
End Sub
Cuadro de mensaje Ok/Cancelar – vbOKCancel
Sub MsgBox_OKCancel()
Dim respuesta As Integer
respuesta = msgbox("Ejemplo de OK o Cancelar", vbOKCancel)
If respuesta = vbOK Then
msgbox "OK"
Else
msgbox "Cancelar"
End If
End Sub
Cuadro de mensaje Sí/No – vbYesNo
Sub MsgBox_SiNo()
Dim respuesta As Integer
respuesta = msgbox("Ejemplo de Si/No", vbYesNo)
If respuesta = vbYes Then
msgbox "Sí"
Else
msgbox "No"
End If
End Sub
Cuadro de mensaje Sí/No/Cancelar – vbYesNoCancel
Sub MsgBox_Si_No_Cancelar()
Dim respuesta As Integer
respuesta = msgbox("Ejemplo de Sí No Cancelar", vbYesNoCancel)
If respuesta = vbYes Then
msgbox "Si"
ElseIf answer = vbNo Then
msgbox "No"
Else
msgbox "Cancelar"
End If
End Sub
Cuadro de mensaje Anular/Reintentar/Omitir – vbAbortRetryIgnore
Sub MsgBox_Anular_Reintentar_Omitir()
Dim respuesta As Integer
respuesta = msgbox("Ejemplo de Anular, Reintentar o Omitir.", vbAbortRetryIgnore)
If respuesta = vbAbort Then
msgbox "Anular"
ElseIf respuesta = vbRetry Then
msgbox "Reintentar"
Else
msgbox "Omitir"
End If
End Sub
Cuadro de mensaje Reintentar/Cancelar – vbRetryCancel
Sub MsgBox_Reintentar_Cancelar()
Dim respuesta As Integer
respuesta = msgbox("Ejemplo de Reintentar/Cancelar", vbRetryCancel)
If respuesta = vbRetry Then
msgbox "Reintentar"
Else
msgbox "Cancelar"
End If
End Sub
Ejemplos de VBA MessageBox
Cuadro de mensaje de confirmación antes de Ejecutar la Macro
Este código mostrará un cuadro de mensaje Sí No antes de llamar a una macro. Si se hace clic en Yes se llama la macro, si se hace clic en No, la macro no se ejecuta.
Sub Msgbox_AntesDeCorrerMacro()
Dim respuesta As Integer
respuesta = msgbox("¿Quiere ejecutar la Macro1?", vbQuestion + vbYesNo)
If respuesta = vbYes Then
Call Macro1
End If
End Sub
Cuadro de Mensaje Sí / No – Salir de Sub
Aquí confirmaremos con el usuario si quiere seguir ejecutando una macro. Si se hace clic en No, el código saldrá del sub, de lo contrario el procedimiento continuará.
Sub Msgbox_AntesDeMacroSalir()
Dim respuesta As Integer
respuesta = msgbox("¿Desea continuar?", vbQuestion + vbYesNo)
If respuesta = vbNo Then Exit Sub
'Algún código
End Sub
Cuadro de mensajes VBA en Access VBA
Todos los ejemplos anteriores funcionan exactamente igual en Access VBA que en Excel VBA.