Msgbox en VBA, mandar mensajes al usuario

Con Msgbox en VBA para Excel podemos mandar de manera muy sencilla mensajes a los usuarios cuando estamos utilizando VBA bien en una macro normal o bien en un evento (ver más sobre eventos).  Este mensaje aparece en la pantalla del usuario como una ventana y puede tener varios elementos de configuración.

Antes de nada tengo que aclarar que un Msgbox puede ser muy útil en cualquier aplicación basada en Office. Puede utilizarse en cualquiera de sus programas y en este breve tutorial mostraremos cómo hacerlo en Excel pero será igual de válido en cualquier otro.

Sintaxis de Msgbox en VBA

La función Msgbox tiene una sintaxis bastante sencilla pero podemos complicarla mucho, casi tanto como se quiera. Básicamente esta función lanza un pop-up con un mensaje. Este pop-up tiene los siguientes argumentos:

  • Mensjae: una cadena de texto que se mostrará al usuario.
  • Título: es opcional. También una cadena de texto que deberá ser breve para mostrar al usuario.
  • Botones: es opcional, por defecto aparecerá “Aceptar”. Los botones pueden ser algunos de los siguientes: vbOKonly, vbCancelOnly, vbYesNo, vbCritical, vbExclamation, vbQuestion…

Ejemplos de Msgbox

A continuación vamos a mostrar algunos ejemplos de esta función y sus resultados.

Ejemplo1: Sólo el mensaje.

Sub MensajeSencillo()
    MsgBox "Bienvenidos a esta web!"
End Sub

Como puede verse en el código que hemos escrito, el mensaje tiene que ir escrito entre comillas dobles.  En la siguiente imagen veréis el resultado de esta macro.

msgbox en VBA ejemplo sencillo

Ejemplo2: Mensaje con una exclamación de título

Sub Mensaje_con_botón()
    MsgBox "Bienvenidos a esta web!", vbExclamation
End Sub

Este mensaje además de ser muy visual, lanza una alerta sonara típica de windows. Como ves, el botón es el de aceptar pero en esta ocasión hay un símbolo de exclamación que hace más “pro” el mensaje.

mensaje con exclamación

Ejemplo3: mensaje con botones de yes y no y título

Como puede verse en el siguiente ejemplo hemos añadido un ejemplo con los tres componentes principales de un Msgbox. No es muy complejo hacerlo pero aún podemos complicarlo un poco más. Fíjate que el título ha cambiado, ya no pone “Microsoft Excel” sino que pone “Mi título”

Sub Mensaje_con_título()
    MsgBox "Bienvenidos a esta web!", vbYesNo, "Mi título"
End Sub

msgbox en vba con título y botones

Ejemplo4: Combinar dos tipos de botones

En este ejemplo vamos a combinar el botón de vbYesNo para que aparezca como en la anterior imagen con el de la exclamación del ejemplo 2.

Sub Mensaje_con_dos_botones()
    MsgBox "Bienvenidos a esta web!", vbYesNo + vbExclamation, "Mi título"
End Sub

En la siguiente imagen vemos como quedan combinados ambos botones creando un efecto muy útil e interesante.

msgbox en vba con dos botones

Ejemplo5: obtener la respuesta si o no del Msgbox

¿Pero se puede hacer? Claro! Sino no habría posibilidad de poner dos botones. Obtener la respuesta es muy útil en los casos en los que queremos hacer algo o no hacerlo. En el ejemplo siguiente, VBA preguntará al usuario si está seguro de querer poner en rojo la celda A1 de este libro (ver más sobre formato de celdas).

Sub Obtener_valor_del_mensaje()
    'primero pongo la pregunta
    resultado = MsgBox("¿Quieres pintar de rojo la celda A1?", vbYesNo, "Colorear A1")
        
    'ahora manejo el resultado a mi antojo
    If resultado = vbYes Then
        Range("A1").Interior.Color = vbRed
    End If
    
End Sub

 

El resultado de esta pequeña macro te animo a que lo descubras tú mismo.

En el siguiente enlace puedes descargar un libro con ejemplos para que puedas practicar tú mismo este pequeño ejercicio:

Ejemplos de Msgbox en VBA

Autor: Quique Arranz

Quique es un fanático del Excel desde que empezó a trabajar con ello hace unos pocos años. Adquirió su conocimiento a través de Google y de infinitas pruebas y más pruebas. Además, Quique es un entusiasta de su familia (mujer e hijos), del deporte y de la cerveza... no dudes en contactar con él para cualquier duda que tengas.

10 opiniones en “Msgbox en VBA, mandar mensajes al usuario”

  1. señor Arranz, yo necesito un codigo que haga lo siguiente, si en la celda C6 yo ingreso la letra N, en la celda D6, no me permita ingresar la Letra A o la letra D, esto para hacer una plantilla de turnos de trabajo, muchas gracias

  2. Hola! Tengo un excel con 5 hojas distintas y quiero que según la fecha que meta en el msgbox me coja una u otra. Hay alguna manera?
    Gracias
    Un saludo

    1. Hola Luis, claro que sí. En el siguiente artículo http://excelyvba.com/select-case-en-vba/ podrás ver la función select case en VBA que te permitirá hacer lo que dices. Deberás prepararlo con sumo cuidado porque no es nada fácil. Además, introduce sentencias de control de errores porque es muuuuuuuy (no ha sido un error al escribir) sencillo escribir incorrectamente las fechas. Saludos,

  3. Hola. Tengo la siguiente duda:
    Tengo un libro en el que en varias hojas aparece un mensaje diferente y quisiera saber si hay alguna manera de que estos mensajes solo aparezcan una sola vez en cada hoja?. Hasta el momento solo logro que uno de ellos aparezca una sola vez, pero no me funciona con los demás.
    Gracias

  4. Que tal Quique, hice una planilla utilizando el ejemplo 5 de esta hoja, y funciona perfecto! y te agradezco. Ahora, cuando protejo la hoja se produce el error 1004. Si, es cierto, intento modificar en una hoja protegida.
    Lo que intento hacer es copiar y pegar 0 (ceros) en una columna segun una condición dada. (si esta el nombre en A1 colocar un 0 (cero) en B1) eso es todo,
    Puedo evitar ese error? o hay otra forma de hacerlo? Muchisimas Gracias, aprecio mucho este blog y tus newsletters.

    1. Hola Nestor, lo que se me ocurre es que desprotejas la hoja antes de que empiece el código de la macro y la vuelvas a proteger al final. Gracias por comentar. Saludos!

  5. Buenas. Hay alguna manera de poner un mensaje que dure unos segundos y se apague (o mejor, desvanezca) solo, sin ningún clic por parte del usuario? Gracias.

Comentarios cerrados.