La función MsgBox de VBA a fondo

Categoría: Macros y VBA

Se trata de una de las funciones más utilizadas en VBA. Además de utilizarla para mostrar mensajes que requieren una acción del usuario, yo la empleo para controlar en momentos específicos, el valor de las variables que utilizo.

El uso más común que le puedes dar a la función MsgBox es el de mostrar un mensaje al usuario o el de solicitarle una respuesta simple (por ejemplo, Aceptar o Cancelar). Si has seguido algún ejemplo de los que he publicado en la web, habrás visto que la empleo a menudo, pero nunca he completado todos los argumentos que acepta.

Sintaxis de la función MsgBox

La sintaxis de la función MsgBox es la siguiente:

MsgBox (texto [, botones] [, título] [,archivo de ayuda, contexto])

  • Texto: Es el mensaje que se mostrará en el cuadro del mensaje.
  • Botones: Se trata de una o varias constantes que indican qué botones e iconos se van a mostrar en el cuadro del mensaje. En la siguiente tabla te muestro todos los botones que puedes emplear.
  • Título: Es el texto que se mostrará en el título de la ventana del cuadro.
  • Archivo de ayuda y contexto: Cuando se especifica este argumento, si el usuario pulsa la tecla de ayuda F1, se abrirá el archivo de ayuda en la parte correspondiente al cuadro del mensaje.

El argumento Texto se refiere al mensaje que se va a mostrar en el cuadro. Éste puede ser una cadena de texto o el valor de una variable. En el primer caso, debe ir siempre encerrado entre comillas.

Gracias a la flexibilidad del argumento Botones, puedes crear fácilmente muchos cuadros de mensaje diferentes. Es posible especificar qué botones quieres mostrar, si debe aparecer un icono y qué botón se muestra por defecto.

Constante Valor Descripción
vbOKOnly 0 Muestra solamente el botón Aceptar.
vbOKCancel 1 Muestra los botones Aceptar y Cancelar.
vbAbortRetryIgnore 2 Muestra los botones Anular, Reintentar y Omitir.
vbYesNoCancel 3 Muestra los botones Sí, No y Cancelar.
vbYesNo 4 Muestra los botones Sí y No.
vbRetryCancel 5 Muestra los botones Reintentar y Cancelar.
vbCritical 16 Muestra el icono de mensaje Crítico.
vbQuestion 32 Muestra el icono de Pregunta.
vbExclamation 48 Muesta el icono de mensaje de advertencia.
vbInformation 64  Muestra el icono de mensaje de Información.
vbDefaultButton1 0 El primer botón es el predeterminado.
vbDefaultButton2 256 El segundo botón es el predeterminado.
vbDefaultButton3 512 El tercer botón es el predeterminado.
vbDefaultButton4 768 El cuarto botón es el predeterminado.
vbSystemModal 0 Se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensaje.
vbApplicationModal 4096 Convierte el cuadro del mensaje en Modal, es decir, que hasta que no se cierre no es posible utilizar ninguna otra función del programa.
vbMsgBoxHelpButton 16384 Muestra un botón de ayuda, pero no se mostrará ninguna ayuda al hacer clic en el botón.
VbMsgBoxSetForeground 65536 La ventana del mensaje se establece como ventana en primer plano.
vbMsgBoxRight 524288 Alinea el texto a la derecha.
vbMsgBoxRtlReading 1048576  Especifica que el texto debe ser leído de derecha a izquierda en árabe y hebreo.

Los primeros cinco valores (de 0 a 5) determinan el número y el tipo de botones que se van a mostrar en el cuadro del mensaje, los cuatro siguientes (de 16 a 64) indican el estilo de icono, los cuatro siguientes (de 0 a 768) hacen referencia al botón predeterminado, los dos siguientes (0 y 4096) hacen referencia al tipo de modalidad del cuadro, y el resto de constantes o valores especifican si el cuadro de mensaje es la ventana en primer plano, la alineación y la dirección del texto.

Tres formas de mostrar el argumento Botones

Para mostrar uno o varios valores para este argumento, puedes hacerlo de tres formas diferentes. Te muestro cómo serían las tres formas si quisieras mostrar un cuadro de mensaje con el texto “Estoy aprendiendo a utilizar la función MsgBox”, con los botones Sí, No y Cancelar, que además se muestre un icono de interrogación, que el segundo botón (No) sea el predeterminado y que el texto del mensaje esté alineado a la derecha:

  • Puedes utilizar la forma clásica, es decir, utilizando el nombre de la constante:
a = MsgBox("Estoy aprendiendo a utilizar la función MsgBox", _
vbYesNoCancel + vbQuestion + vbDefaultButton2 + vbMsgBoxRight)
  • También puedes utilizar el valor equivalente de cada constante:
a = MsgBox("Estoy aprendiendo a utilizar la función MsgBox", 3 + 32 + 256 _
+ 524288)
  • Por último, puedes usar el valor de la suma de los argumentos (3+32+256+524288)
a = MsgBox("Estoy aprendiendo a utilizar la función MsgBox", 524579)

Personalmente prefiero la primera opción, porque es mucho más fácil de recordar el nombre de una constante que su valor. Tú puedes utilizar la que prefieras en cada momento, ya que cualquiera de las tres opciones es exactamente la misma.

Habrás observado que he asignado a la variable a, el resultado del cuadro del mensaje, es decir, el botón que pulsa el usuario. Si no le asignase el valor a una variable, la sintaxis anterior mostraría un error. Esto no sería necesario si utilizaras la función MsgBox solamente para mostrar el mensaje.

Para obtener una respuesta de un cuadro de mensaje, debes asignar el resultado de la función MsgBox a una variable. En el código que te muestro a continuación, he utilizado la constante (en vez de su valor), para que te resulte más claro:

Sub Continuar()
Dim Respuesta As Integer ' La función devuelve un valor entero
Respuesta = MsgBox("¿Deseas continuar?", vbYesNo)
Select Case Respuesta
    Case vbYes
        MsgBox "Has indicado que deseas continuar"
    Case vbNo
        MsgBox "Has indicado que no deseas continuar"
End Select
End Sub

¿Qué resultados puede devolver MsgBox?

Estos son todos los valores que puede devolver la función MsgBox:

Constante Valor Botón en el que se ha pulsado
vbOK 1 Aceptar
vbCancel 2 Cancelar
vbAbort 3 Anular
vbRetry 4 Reintentar
vbIgnore 5 Omitir
vbYes 6
vbNo 7 No

El ancho del cuadro de mensaje depende de la longitud del mensaje y de la resolución de pantalla que tengas. Si quieres introducir un salto de línea para que el mensaje quede algo más estético, debes utilizar la constante vbCrLf (o vbNewLine). Observa el siguiente ejemplo:

Mensaje = "Esta es la primera línea" & vbCrLf & vbCrLf
Mensaje = Mensaje & "Esta es la segunda línea" & vbCrLf
Mensaje = Mensaje & "Y esta, la tercera línea"
MsgBox Mensaje

El argumento Título no tiene más misterio que el argumento Texto. Puedes utilizar una cadena de texto entre comillas o una variable. Este contenido se mostrará en la barra de título del cuadro del mensaje, sustituyendo al mensaje estándar “Microsoft Excel”.

El argumento Archivo de ayuda hace referencia a la ubicación del archivo donde se encuentra la ayuda del cuadro del mensaje. El argumento Contexto indica dónde se encuentra exactamente la ayuda dentro del archivo de ayuda.

Comenta si te ha parecido interesante.