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 |
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