Este tutorial cubrirá cómo usar la función VBA MsgBox para mostrar cuadros de mensaje a los usuarios (incluido el cuadro de mensaje YesNo). También puede estar interesado en nuestro artículo sobre InputBoxes.
Función VBA MsgBox
En VBA, es fácil mostrar un MsgBox simple:
1 | MsgBox "Este es un cuadro de mensaje" |
Sin embargo, puede hacer mucho más que mostrar un simple cuadro de mensaje OK. Veamos rápidamente un ejemplo complicado antes de profundizar en los detalles …
Cuadro de mensaje VBA YesNo
A continuación crearemos un cuadro de mensaje con:
- Un título "Título del cuadro de mensaje" y el mensaje "Texto"
- Un icono de signo de interrogación
- Opciones de Sí / No en lugar de un simple "Aceptar"
- Botón predeterminado = "No"
123 | Respuesta tenue como enteroanswer = MsgBox ("Texto", vbQuestion + vbYesNo + vbDefaultButton2, "Título del cuadro de mensaje") |
El cuadro de mensaje devolverá vbYes o vbNo según la elección del usuario. Luego, puede realizar diferentes acciones según la elección:
12345 | Si answer = vbYes EntoncesMsgBox "Sí"DemásMsgBox "No"Terminara si |
En la siguiente sección, le mostraremos todas las opciones disponibles para usted al crear buzones de mensajes. Luego, le presentaremos la sintaxis de la función MsgBox y finalmente repasaremos otros ejemplos de cuadros de mensaje.
Opciones del cuadro de mensaje de VBA
Hecha un vistazo a la imagen de abajo. Aquí verá (casi) todas las opciones disponibles para usted al crear buzones de mensajes. Fíjate en los iconos y los diferentes botones.
Esta es una captura de pantalla del "MessageBox Builder" de nuestro complemento Premium VBA: AutoMacro. MessageBox Builder 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ódigos, una extensa biblioteca de códigos VBA y una variedad de herramientas de codificación. Es imprescindible para cualquier desarrollador de VBA.
Sintaxis de la función MsgBox
MsgBox (indicador [, botones] [, título] [, archivo de ayuda, contexto])
prompt (obligatorio) - Este es el texto del cuadro de mensaje principal.
botones - Elija qué botones mostrar. Si se omite, "OK solo". Aquí también puede especificar qué icono mostrar y el botón predeterminado.
título - El título en la parte superior del cuadro de mensaje. Si se omite, se muestra el nombre de la aplicación actual (por ejemplo, Microsoft Excel).
archivo de ayuda - Especifique el archivo de ayuda al que se puede acceder cuando el usuario hace clic en el botón "Ayuda". Si se especifica, también debe agregar contexto (a continuación)
contexto - Expresión numérica que representa el número de contexto de ayuda asignado al tema de ayuda correspondiente.
Probablemente pueda ignorar los argumentos del archivo de ayuda y del contexto. Nunca los he visto usar.
Personalizar el título y el mensaje del cuadro de mensaje
La función MsgBox le permite personalizar el título y los mensajes de aviso así:
1 | Msgbox "Mensaje", "Título" |
Otro ejemplo:
123 | Sub MsgBoxPromptTitle ()MsgBox "Paso 1 completo. Haga clic en Aceptar para ejecutar el paso 2", "Paso 1 de 5"End Sub |
¡Importante! Debe recordar rodear su texto con citas.
Saltos de línea del cuadro de mensaje
También puede agregar saltos de línea a las indicaciones de su cuadro de mensaje con "vbNewLine".
123 | Sub MsgBoxPromptTitle_NewLine ()MsgBox "Paso 1 completo". & vbNewLine & "Haga clic en Aceptar para ejecutar el paso 2", "Paso 1 de 5"End Sub |
Observe que usamos el símbolo & para unir texto. Puede obtener más información sobre el uso de & con texto y otras opciones para insertar saltos de línea en nuestro artículo sobre cómo unir texto.
Iconos de MsgBox
VBA le brinda la posibilidad de agregar uno de los cuatro íconos prediseñados a sus cuadros de mensaje:
Constante de icono | Icono |
---|---|
vbInformación | ![]() |
vbCritical | ![]() |
vbQuestion | ![]() |
vbExclamación | ![]() |
La constante Icon debe colocarse dentro del argumento del botón:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Ejemplo de pregunta", vbQuestionEnd Sub |
Esto generará el cuadro de mensaje predeterminado "Aceptar" con el icono de Pregunta:
Observe cómo cuando escribe, el Editor de VBA le mostrará las opciones disponibles para usted:
Esto es útil porque no es necesario recordar la sintaxis exacta o los nombres de los iconos o botones.
Ahora haremos una demostración de cada icono de cuadro de mensaje:
Iconos de MsgBox - Información
123 | Sub MsgBoxInformationIcon ()MsgBox "Ejemplo de información", vbInformationEnd Sub |
Iconos de MsgBox - Crítico
123 | Sub MsgBoxCriticalIcon ()MsgBox "Ejemplo crítico", vbCriticalEnd Sub |
Iconos de MsgBox - Pregunta
123 | Sub MsgBoxQuestionIcon ()MsgBox "Ejemplo de pregunta", vbQuestionEnd Sub |
Iconos de MsgBox - Exclamación
123 | Sub MsgBoxExclamationIcon ()MsgBox "Ejemplo de exclamación", vbExclamationEnd Sub |
A continuación, hablaremos sobre la generación de cuadros de mensajes con diferentes diseños de botones. Si elige un tipo de cuadro de mensaje diferente, deberá agregar el tipo de icono después de los botones con un "+":
123 | Sub MsgBoxQuestionIcon ()MsgBox "¿Desea continuar?", VbOKCancel + vbQuestionEnd Sub |
Variables de MsgBox
Hasta ahora, hemos trabajado principalmente con el cuadro de mensaje "Aceptar" predeterminado. El cuadro de mensaje OK solo tiene una opción: presionar "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 según el botón que se presione. Veamos un ejemplo.
Aquí está el cuadro de mensaje que generaremos:
Este es el código completo (lo desglosaremos a continuación):
123456789101112 | Sub MsgBoxVariable ()Respuesta tenue como enteroanswer = MsgBox ("¿Desea continuar?", vbQuestion + vbYesNo)Si answer = vbYes EntoncesMsgBox "Sí"DemásMsgBox "No"Terminara siEnd Sub |
Primero asignamos la salida del cuadro de mensaje a una variable entera.
123 | Respuesta tenue como enteroanswer = MsgBox ("¿Desea continuar?", vbQuestion + vbYesNo) |
A continuación, usamos un If-Else para determinar qué hacer en función de qué botón se presiona:
12345 | Si answer = vbYes EntoncesMsgBox "Sí"DemásMsgBox "No"Terminara si |
La función MsgBox devuelve un valor entero (entre 1-7), por lo que definimos la variable como un tipo entero. Sin embargo, en lugar de hacer referencia al número entero, puede hacer referencia a una constante (por ejemplo, vbOK, vbCancel, etc.). Mire esta tabla para ver todas las opciones:
Botón | Constante | Valor |
---|---|---|
OK | vbOK | 1 |
Cancelar | vbCancel | 2 |
Abortar | vbAbort | 3 |
Rever | vbRetry | 4 |
Ignorar | vbIgnore | 5 |
sí | vb Sí | 6 |
No | vbNo | 7 |
Ahora demostraremos cada grupo de botones:
Cuadro de mensaje OK - vbOKOnly
Este es el cuadro de mensaje estándar de VBA.
123456 | Sub MsgBox_OKOnly ()Respuesta tenue como enteroanswer = MsgBox ("OKOnly Example", vbOKOnly)End Sub |
Aceptar Cancelar cuadro de mensaje - vbOKCancel
123456789101112 | Sub MsgBox_OKCancel ()Respuesta tenue como enteroanswer = MsgBox ("Aceptar Cancelar ejemplo", vbOKCancel)Si answer = vbOK EntoncesMsgBox "Aceptar"DemásMsgBox "Cancelar"Terminara siEnd Sub |
Sí No Cuadro de mensaje - vb Sí No
123456789101112 | Sub MsgBox_YesNo ()Respuesta tenue como enteroanswer = MsgBox ("Sí No Ejemplo", vbYesNo)Si answer = vbYes EntoncesMsgBox "Sí"DemásMsgBox "No"Terminara siEnd Sub |
Sí No Cancelar cuadro de mensaje - vbYesNoCancel
1234567891011121314 | Sub MsgBox_YesNoCancel ()Respuesta tenue como enteroanswer = MsgBox ("Sí No Cancelar ejemplo", vbYesNoCancel)Si answer = vbYes EntoncesMsgBox "Sí"ElseIf answer = vbNo EntoncesMsgBox "No"DemásMsgBox "Cancelar"Terminara siEnd Sub |
Cancelar reintento Ignorar cuadro de mensaje - vbAbortRetryIgnore
1234567891011121314 | Sub MsgBox_AbortRetryIgnore ()Respuesta tenue como enteroanswer = MsgBox ("Anular reintento Ignorar ejemplo", vbAbortRetryIgnore)Si answer = vbAbort ThenMsgBox "Abortar"ElseIf answer = vbRetry ThenMsgBox "Reintentar"DemásMsgBox "Ignorar"Terminara siEnd Sub |
Reintentar Cancelar cuadro de mensaje - vbRetryCancel
123456789101112 | Sub MsgBox_RetryCancel ()Respuesta tenue como enteroanswer = MsgBox ("Ejemplo de reintento de cancelación", vbRetryCancel)Si answer = vbRetry EntoncesMsgBox "Reintentar"DemásMsgBox "Cancelar"Terminara siEnd Sub |
Ejemplos de cuadro de mensajes de VBA
Confirmación del cuadro de mensaje 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 Sí, se llama a la macro, si se hace clic en No, la macro no se ejecuta.
12345678 | Sub Msgbox_BeforeRunning ()Respuesta tenue como enteroanswer = MsgBox ("¿Desea ejecutar Macro1?", vbQuestion + vbYesNo)Si answer = vbYes, entonces llame a Macro1End Sub |
Cuadro de mensaje Sí / No - Salir de Sub
Aquí confirmaremos con el usuario si continuar ejecutando una macro. Si se hace clic en No, el código saldrá del sub, de lo contrario, el procedimiento continuará.
12345678910 | Sub Msgbox_BeforeRunning ()Respuesta tenue como enteroanswer = MsgBox ("¿Desea continuar?", vbQuestion + vbYesNo)Si respuesta = vbNo, salga de Sub'Algún códigoEnd Sub |
Cuadro de mensaje de VBA en Access VBA
Todos los ejemplos anteriores funcionan exactamente igual en Access VBA que en Excel VBA.