VBA – Caja de Mensajes (Msgbox)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on agosto 22, 2022

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"

Cuadro de mensajes msgbox

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

Cuadro-mensajes msgbox con opciones

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. vba write messagebox code 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

Cuadro mensajes msgbox aviso titulo

¡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

Cuadro Mensaje Saltos De Linea

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 vba information msgbox icon
vbCrítico vba critical msgbox icon
vbPregunta vba question msgbox icon
vbExclamación vba exclamation msgbox icon

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:

Cuadro Mensaje Tipo De Icono

Observe cómo al escribir, el Editor VBA le mostrará las opciones disponibles:

Cuadro mensaje opciones tipo icono

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

MsgBox Icono De Informacion

 

Iconos MsgBox – Críticos

Sub MsgBoxIconoCritico()
  msgbox "Ejemplo Aviso Crítico", vbCritical
End Sub

MsgBox Icono Critico

 

Iconos MsgBox – Pregunta

Sub MsgBoxIconoPregunta()
  msgbox "Ejemplo de pregunta", vbQuestion
End Sub

MsgBox Icono Pregunta

 

Iconos MsgBox – Exclamación

Sub MsgBoxIconoExclamacion()
  msgbox "Ejemplo de Exclamación", vbExclamation
End Sub

MsgBox Icono Exclamacion

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

MsgBox-Icono De Pegunta Compuesto

 

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:

MsgBox Variable

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
vbYes 6
No vbNo 7

Ahora haremos una demostración de cada agrupación de botones:

Cuadro de mensaje OK – vbOKOnly

MsgBox Solo OK

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

MsgBox OKCancel

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

MsgBox SiNo

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

MsgBox Si No Cancelar

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

MsgBox Anular Reintentar Omitir

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

MsgBox Reintentar Cancelar

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

Msgbox Antes De Correr Macro

 

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

Msgbox Antes De-Macro Salir

Cuadro de mensajes VBA en Access VBA

Todos los ejemplos anteriores funcionan exactamente igual en Access VBA que en Excel VBA. vba yes no msgbox

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples