Uso de la función Msgbox en VBA

La comunicación con tu computador es de gran importancia para facilitar tu experiencia de uso de algún programa o aplicación. Al igual que los de los Userforms, los cuadros de diálogo son una de las opciones más usadas en la interacción con el usuario , ya que por medio de estos el programa hacer saber, por ejemplo, si existe la necesidad de introducir algún dato, o simplemente que conozcas que los resultados de algún procedimiento fueron satisfactorios o erróneos.

Los cuadros de dialogo en VBA pueden ser de dos tipos: los de ingreso de datos, también conocidos como InputBox, e informativos, conocidos como Message Box (MsgBox), el cual abordaremos en este tutorial.

Sintaxis básica del Msgbox en VBA

La instrucción en VBA para mostrar un MsgBox básico sigue esta estructura:

MsgBox Mensaje

Por ejemplo:

Sub MsgboxBasico()
  MsgBox "Analysis completed"
End Sub

El mensaje que aparece en el cuadro de dialogo puede tener una longitud máxima de 256 caracteres. Si tu mensaje excede esa longitud, será automáticamente truncado por VBA a los 256 caracteres.

En algunas ocasiones será conveniente almacenar el mensaje que quieres mostrar en una variable, como te mostramos en el siguiente ejemplo:

Sub MsgboxBasico() 
  Dim Message As String
  Message = "Analysis completed"
  MsgBox Message
End Sub

Argumentos opcionales de los Msgbox

Los MsgBox tienen algunas utilidades que permiten potenciar su funcionamiento y mejorar la experiencia del usuario del programa. Para ello debemos utilizar algunos argumentos opcionales en la estructura del MsgBox, los cuales describimos a continuación:

MsgBox Arg1, Arg2, Arg3

Donde:

Arg1: representa el mensaje que va a ser mostrado en el cuadro de diálogo. Es el único argumento obligatorio.

Arg2: es un argumento opcional. Es el más rico de información ya que controla tanto la cantidad y tipo de botones como los iconos ilustrativos que aparecerían en el cuadro de dialogo. A continuación te mostramos alguno de los comandos más utilizados para este argumento:

Constante Valor Descripción
vbOKOnly 0 Sólo muestra el botón “OK”
vbOKCancel 1 Sólo muestra el botón “Cancelar”
vbAbortRetryIgnore 2 Muestra los botones de Abortar e ignorar
vbYesNoCancel 3 Muestra los botones “Si”,  “No” y “Cancelar”
vbYesNo 4 Muestra los botones “Si” y “No”
vbRetryCancel 5 Muestra los botones “Reintentar” y “Cancelar”
vbCritical 16 Icono de error o falla crítica
vbQuestion 32 Icono de interrogación
vbExclamation 48 Icono de exclamación
vbInformation 64 Icono de información
vbMsgBoxRight 524288 Alineación del texto a la derecha
* El texto de los botones aparecerá en el idioma del sistema operativo del computador

Un aspecto particular de este argumento es que puedes hacer una combinación de botones e iconos. Para ello debes  colocar el signo “+” entre los valores o constantes del “Arg2”.

Por ejemplo, si quisiéramos que nuestro MsgBox tuviese los botones “Si” y “No” y a la vez mostrara el icono de interrogación, podríamos hacerlo de las siguientes maneras ya que son equivalentes si empleamos los valores o las constantes:

MsgBox “Message”, 4 + 32, “Header” ‘—> Usando valores

MsgBox “Message”, vbYesNo + vbQuestion, “Header” ‘—> Usando constantes

Arg3: es un argumento opcional que corresponde al encabezado del cuadro de dialogo. Podría manejarse igual que el cuerpo del mensaje a través de una variable que cambiaría según el resultado de procedimientos de tu macro. Si deseas incluir un encabezado sin alterar los valores por defecto de “Arg2” deberás dejar un espacio separado por comas en la linea de instrucción del código, de la siguiente forma:

MsgBox “Message”, , “Header”

Valores de respuesta de los botones en los Msgbox

Cuando empleamos botones diferentes al “Aceptar”, tendríamos la opción de almacenar la respuesta del usuario en una variable y con ello poder tomar algún tipo de decisión. Normalmente estas opciones están asociada a condicionales.

Para que puedas hacer alguna operación con la respuesta del Msgbox, debes modificar ligeramente la estructura básica, como te mostramos a continuación:

VariableRespuesta = MsgBox (Arg1, Arg2, Arg3)

La variable de respuesta tomara valores en función a la elección del usuario. En el siguiente cuadro observarás ejemplos para cada caso.

Descripción del Botón Respuesta (Constante) Respuesta (Valor) Ejemplo
 “OK” vbOK 1 answer = MsgBox(Message, vbOKOnly, Header) If answer = vbOK Then     Continúa el código…
 “Cancelar” vbCancel 2 answer = MsgBox(Message, vbOKCancel, Header) If answer = 2 Then     Continúa el código…
Abortar vbAbort 3 answer = MsgBox(Message, vbAbortRetryIgnore, Header) If answer = vbAbort Then     Continúa el código…
Reintentar vbRetry 4 answer = MsgBox(Message, vbAbortRetryIgnore, Header) If answer = vbRetry Then     Continúa el código…
Ignorar vbIgnore 5 answer = MsgBox(Message, vbAbortRetryIgnore, Header) If answer = 5 Then     Continúa el código…
Si vbYes 6 answer = MsgBox(Message, vbYesNoCancel, Header) If answer = vbYes Then     Continúa el código…
No vbNo 7 answer = MsgBox(Message, vbYesNoCancel, Header) If answer = vbNo Then     Continúa el código…

Ejemplos de uso de la función Msgbox de VBA

Como vimos anteriormente, cuando realices la programación de los botones, iconos y textos de los Msgbox, puedes escoger entre el uso de valores o constantes en los argumentos de la función. A continuación te presentamos varios casos de ejemplo para que puedas adaptar los Msgbox a tus necesidades.

Ejemplo de Msgbox con ícono crítico y botones de abortar, reintentar e ignorar

Usando valores:

Sub MsgboxPrueba() 
  Message = "Mensaje de Error"
  Header = "Error"
  Answer=MsgBox (Message, 2 + 16, Header)
  If Answer = 3 Then
   Exit Sub
  End If
End Sub

Usando constantes:

Sub MsgboxPrueba() 
  Message = "Mensaje de Error"
  Header = "Error"
  Answer=MsgBox (Message, vbAbortRetryIgnore + vbCritical, Header)
  If Answer = vbAbort Then
    Exit Sub
  End If
End Sub

Ejemplo de Msgbox con ícono de interrogación y botones de Sí y No

Usando valores:

Sub MsgboxPrueba() 
  Message = "Mensaje de pregunta"
  Header = "Pregunta"
  Answer=MsgBox (Message, 4 + 32, Header)
  If Answer = 6 Then
    MsgBox "Yes"
  End If
End Sub

Usando constantes:

Sub MsgboxPrueba() 
  Message = "Mensaje de pregunta"
  Header = "Pregunta"
  Answer=MsgBox (Message, vbYesNo + vbQuestion, Header)
  If Answer = vbYes Then
    MsgBox "Yes"
  End If
End Sub

Ejemplo de Msgbox con ícono de información y texto alineado a la derecha

Usando valores:

Sub MsgboxPrueba() 
  Message = "Mensaje Alineado a la derecha"
  Header = "Información"
  MsgBox Message, 48 + 524288, Header
End Sub

Usando constantes:

Sub MsgboxPrueba() 
  Message = "Mensaje Alineado a la derecha"
  Header = "Información"
  MsgBox Message, vbExclamation + vbMsgBoxRight, Header
End Sub

Recuerda que puedes combinar los tres tipos de argumentos en un mismo MsgBox según lo requieras!

Con estas herramientas que has aprendido ahora mejoraras la experiencia de los usuarios de tus macros. No dejes del practicar estos trucos y veras la diferencia.

 

Tienes alguna duda?…. Contactanos

Uso de la función Msgbox en VBA

También te puede interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada.