La función MsgBox en VBA nos permite mostrar un mensaje dentro de un cuadro de diálogo en espera de que el usuario de Excel haga clic sobre alguno de los botones provistos. Si lo deseamos podemos tomar alguna acción específica después de conocer el botón pulsado por el usuario.
Argumentos de la función MsgBox
La función MsgBox en VBA tiene 5 argumentos, los cuales explicaré a continuación:
- Prompt (obligatorio): Es la cadena de texto que se mostrará como el mensaje dentro del cuadro de diálogo. La longitud máxima es de 1024 caracteres, pero depende del tipo de fuente utilizada.
- Buttons (opcional): Expresión numérica que proviene de la suma de ciertas constantes que representan el tipo de botón e iconos a desplegar.
- Title (opcional): Cadena de texto que se mostrará como el título del cuadro de diálogo. Si se omite, el título será el nombre de la aplicación.
- HelpFile (opcional): Cadena de texto con la ubicación del archivo de ayuda asociado al cuadro de diálogo. Si se especifica este argumento, debe indicarse también Context.
- Context (opcional): Valor numérico asignado por el autor al tema de ayuda. Si se especifica este argumento, debe indicarse también HelpFile.
Para dejar en claro el uso de cada uno de los argumentos de la función haremos varios ejemplos y para cada uno de ellos crearé un botón de comando ActiveX e insertaré el código correspondiente en su evento Click. Al final del artículo encontrarás el vínculo para descargar el libro de trabajo.
Ejemplo 1: La función MsgBox en VBA
Ya que solamente el primer argumento de la función MsgBox es obligatorio, podemos crear un mensaje informativo para el usuario con la siguiente línea de código:
Private Sub CommandButton1_Click() MsgBox "Hola Mundo" End Sub
Al ejecutar este código se mostrará un cuadro de diálogo como el siguiente:
Al no haber especificado ningún valor para el segundo argumento, se muestra solamente el botón Aceptar. Y ya que tampoco hay un tercer argumento, el cuadro de diálogo tendrá el título “Microsoft Excel” que es el nombre de la aplicación.
Ejemplo 2: El argumento Title
Antes de revisar el segundo argumento de la función MsgBox, hablaremos sobre su tercer argumento que es el título del cuadro de diálogo. Para poner un título personalizado será suficiente indicarlo de la siguiente manera:
Private Sub CommandButton2_Click() MsgBox "Hola Mundo", , "Mensaje especial" End Sub
Esta instrucción mostrará el título del cuadro de diálogo como “Mensaje especial” y ya no se mostrará el nombre de la aplicación. Observa el resultado:
Ejemplo 3: El argumento Buttons
Hasta ahora solo has visto el botón Aceptar en el cuadro de diálogo, pero el segundo argumento de la función MsgBox nos permitirá indicar los botones que deseamos mostrar y también podremos elegir el icono desplegado y el comportamiento del cuadro de diálogo. La siguiente tabla indica los valores que podemos utilizar para este argumento:
Todos estos valores los podemos dividir en cinco grupos. El primer grupo (0, 1, 2, 3, 4, 5) nos permite indicar los botones que se mostrarán en el cuadro de diálogo, el segundo grupo (16, 32, 48, 64) determinará el tipo de ícono mostrado, el tercer grupo (0, 256, 512, 768) es útil para indicar el botón predeterminado. El cuarto grupo (0, 4096) es la modalidad del cuadro de diálogo y el último grupo, que son los valores restantes, nos permiten indicar la alineación del texto y si deseamos mostrar un botón de Ayuda.
Ya que los valores de cada grupo son excluyentes, solo hace sentido elegir un valor de cada uno de ellos. De esta manera, si deseo mostrar los botones Si y No, y además mostrar un icono de mensaje de advertencia, entonces debo utilizar la siguiente instrucción:
Private Sub CommandButton3_Click() MsgBox "Hola Mundo", vbYesNo + vbExclamation, "Mensaje especial" End Sub
Para el segundo argumento puedes utilizar las constantes definidas para cada opción o utilizar directamente el valor numérico correspondiente de acuerdo a la tabla. El resultado de esta instrucción será el siguiente:
Para cada opción adicional que desees indicar deberás agregarla utilizando el símbolo de suma (+). Recuerda que este argumento este argumento de la función MsgBox es de valor numérico, así que Excel obtendrá la suma total para conocer las opciones indicadas.
Ejemplo 4: Conocer el botón pulsado
Para conocer el botón que ha sido pulsado por el usuario, es necesario guardar el valor devuelto por la función MsgBox en una variable:
resultado = MsgBox("Hola Mundo", vbAbortRetryIgnore + vbQuestion, "Mensaje especial")
Antes de continuar debo mencionar algo importante sobre esta instrucción ya que, a diferencia de las anteriores, en esta ocasión los argumentos de la función MsgBox están encerrados en paréntesis. Esto se debe a una regla de programación en VBA la cual indica que cuando se llama a una función que devolverá un valor el cual será asignado a una variable, su lista de argumentos deberá estar rodeada por paréntesis. Así que no podemos olvidar colocar los paréntesis si queremos conocer el botón pulsado por el usuario.
Ahora bien, la variable resultado guardará el valor devuelto por la función MsgBox el cual puede ser cualquiera de las siguientes opciones dependiendo los botones que hayamos decidido mostrar:
Una vez que el usuario hace clic sobre un botón, la función MsgBox nos devuelve el valor correspondiente y podremos comparar dicho valor con las contantes mencionadas en la tabla anterior. Para nuestro ejemplo, utilizaré una sentencia Select Case para comparar la variable resultado con todas las opciones posibles:
Private Sub CommandButton4_Click() resultado = MsgBox("Hola Mundo", vbAbortRetryIgnore + vbQuestion, "Mensaje especial") Select Case resultado Case vbOK: MsgBox "Se pulsó el botón Aceptar" Case vbCancel: MsgBox "Se pulsó el botón Cancelar" Case vbAbort: MsgBox "Se pulsó el botón Anular" Case vbRetry: MsgBox "Se pulsó el botón Reintentar" Case vbIgnore: MsgBox "Se pulsó el botón Omitir" Case vbYes: MsgBox "Se pulsó el botón Si" Case vbNo: MsgBox "Se pulsó el botón No" End Select End Sub
Una vez identificado el botón sobre el cual el usuario ha hecho clic, mostraremos otro mensaje con el nombre de dicho botón. En un caso real, esa línea de código sería reemplazada por las instrucciones que se deseas ejecutar de acuerdo a la respuesta del usuario.
En nuestro ejemplo mostramos un cuadro de diálogo con los botones Anular, Reintentar y Omitir, así que si el usuario hace clic sobre el botón Reintentar se mostrará el mensaje que nos confirmará dicha acción:
Con los ejemplos realizados hasta el momento hemos cubierto la gran mayoría de opciones de uso de la función MsgBox en VBA. La verdad es que los últimos dos argumentos de la función son muy poco utilizados pero haremos un último ejemplo para mostrar su uso.
Ejemplo 5: El botón de Ayuda
En la sección del ejemplo 3 mostré la tabla de posibles opciones para el argumento Buttons y una de ellas es la opción vbMsgBoxHelpButton la cual ocasionará que se muestre un botón con la leyenda Ayuda dentro del cuadro de diálogo. El único objetivo de este botón es mostrar un archivo externo con ayuda adicional para el usuario sobre los botones que puede a pulsar.
Para que el botón de Ayuda funcione correctamente es necesario utilizar el cuarto y quinto argumento de la función MsgBox. En el cuarto argumento debemos indicar la ruta donde se encuentra el archivo de ayuda, que generalmente es un archivo CHM, y el quinto argumento será utilizado para indicar el número del tema que será mostrado. Este último argumento es una característica de los archivos de ayuda, y es una configuración que se hace al construir ese tipo de archivos.
Para nuestro ejemplo utilizaremos un archivo de ayuda previamente elaborado y donde sabemos que existe el tema de ayuda 20000 y por lo tanto podemos utilizar las instrucciones siguientes para mostrarlo:
Private Sub CommandButton5_Click() strRuta = ThisWorkbook.Path & "CHM-example.chm" MsgBox "Hola Mundo", vbOKCancel + vbCritical + vbMsgBoxHelpButton, _ "Mensaje especial", strRuta, 20000 End Sub
Para este ejemplo es necesario colocar el archivo CHM en la misma carpeta que el libro de Excel ya que he utilizado la instrucción ThisWorkbook.Path para indicar que el archivo de ayuda se encuentra en la misma ubicación. Al hacer clic sobre el botón Ayuda, se abrirá una nueva ventana que nos permitirá visualizar el archivo indicado.
Con este último ejemplo hemos cubierto todos los argumentos de la función MsgBox en VBA y estás listo para comenzar a crear tus propios mensajes dentro de tus aplicaciones de Excel. Descarga el libro de trabajo para probar por ti mismo cada uno de los ejemplos y seguir experimentando con la función MsgBox.