InputBox y MsgBox
Al crear macros en VBA, la capacidad de recibir entrada del usuario y mostrar resultados de procesamiento es esencial. VBA proporciona dos funciones—InputBox y MsgBox—que facilitan estas tareas.
Este artículo cubre todo, desde el uso básico hasta técnicas avanzadas para InputBox y MsgBox, con ejemplos de código prácticos.
Cuándo necesitas InputBox y MsgBox
En la práctica, usarás InputBox y MsgBox en estas situaciones:
Casos de uso de InputBox
- Entrada de nombre de usuario: Capturar nombres para inicio de sesión o registro
- Entrada de palabras clave de búsqueda: Buscar valores específicos en datos
- Entrada numérica: Obtener parámetros necesarios para cálculos
- Especificación de nombre de archivo: Permitir a los usuarios especificar nombres de archivo para guardar
- Entrada de fecha: Establecer rangos de fechas o condiciones de filtro
Casos de uso de MsgBox
- Notificaciones de finalización: Mensajes de “Procesamiento completado”
- Visualización de mensajes de error: Advertencias cuando ocurren problemas
- Diálogos de confirmación: Avisos de “¿Está seguro de que desea eliminar?”
- Presentación de opciones: Solicitudes de selección “Sí/No”
- Visualización de información: Mostrar resultados de cálculos o estadísticas
MsgBox: Mostrar mensajes
Sintaxis básica
MsgBox(mensaje, [botones], [título], [archivoayuda], [contexto])
Forma más simple:
MsgBox "Mensaje"
Uso básico
Sub MsgBoxBasico()
' Visualización simple de mensaje
MsgBox "¡Hola, Mundo!"
' Con título
MsgBox "Procesamiento completado.", , "Notificación"
' Mensaje multilínea
MsgBox "Línea 1" & vbCrLf & "Línea 2" & vbCrLf & "Línea 3"
End Sub
vbCrLf es una constante de salto de línea. También puedes usar vbLf (salto de línea) o vbCr
(retorno de carro).
Tipos de botones
MsgBox soporta varias combinaciones de botones:
| Constante | Valor | Descripción |
|---|---|---|
| vbOKOnly | 0 | Solo botón Aceptar (predeterminado) |
| vbOKCancel | 1 | Botones Aceptar y Cancelar |
| vbAbortRetryIgnore | 2 | Botones Anular, Reintentar, Ignorar |
| vbYesNoCancel | 3 | Botones Sí, No, Cancelar |
| vbYesNo | 4 | Botones Sí y No |
| vbRetryCancel | 5 | Botones Reintentar y Cancelar |
Sub MsgBoxBotones()
' Botones Aceptar y Cancelar
MsgBox "¿Continuar?", vbOKCancel, "Confirmar"
' Botones Sí/No
MsgBox "¿Eliminar este elemento?", vbYesNo, "Confirmación de eliminación"
' Botones Sí/No/Cancelar
MsgBox "¿Guardar cambios?", vbYesNoCancel, "Confirmación de guardado"
End Sub
Tipos de iconos
Muestra iconos según la importancia del mensaje:
| Constante | Valor | Descripción | Icono |
|---|---|---|---|
| vbCritical | 16 | Error crítico | ❌ |
| vbQuestion | 32 | Pregunta | ❓ |
| vbExclamation | 48 | Advertencia | ⚠️ |
| vbInformation | 64 | Información | ℹ️ |
Sub MsgBoxIconos()
' Mensaje de error
MsgBox "¡Ocurrió un error!", vbCritical, "Error"
' Mensaje de advertencia
MsgBox "Por favor verifique su entrada.", vbExclamation, "Advertencia"
' Mensaje de información
MsgBox "Proceso completado.", vbInformation, "Completado"
' Mensaje de pregunta
MsgBox "¿Eliminar esto?", vbQuestion + vbYesNo, "Confirmar"
End Sub
vbYesNo + vbQuestion Manejo de valores de retorno
MsgBox devuelve un valor basado en qué botón hace clic el usuario:
| Constante | Valor | Botón presionado |
|---|---|---|
| vbOK | 1 | Aceptar |
| vbCancel | 2 | Cancelar |
| vbAbort | 3 | Anular |
| vbRetry | 4 | Reintentar |
| vbIgnore | 5 | Ignorar |
| vbYes | 6 | Sí |
| vbNo | 7 | No |
Sub MsgBoxValorRetorno()
Dim resultado As VbMsgBoxResult
' Obtener selección del usuario
resultado = MsgBox("¿Eliminar este archivo?", vbYesNo + vbQuestion, "Confirmación")
' Ramificar según el valor de retorno
If resultado = vbYes Then
MsgBox "Archivo eliminado.", vbInformation
' Código de eliminación real aquí
Else
MsgBox "Eliminación cancelada.", vbInformation
End If
End Sub
Para operaciones destructivas como eliminación, establece la opción segura como botón predeterminado para prevenir ejecución accidental.
InputBox: Obtener entrada del usuario
Sintaxis básica
InputBox(mensaje, [título], [predeterminado], [xpos], [ypos], [archivoayuda], [contexto])
Uso básico
Sub InputBoxBasico()
Dim nombreUsuario As String
' Entrada simple
nombreUsuario = InputBox("Ingrese su nombre:")
If nombreUsuario <> "" Then
MsgBox "¡Hola, " & nombreUsuario & "!", vbInformation
Else
MsgBox "No se ingresó nombre.", vbExclamation
End If
End Sub
Validación de entrada
Sub InputBoxConValidacion()
Dim entrada As String
Dim numero As Double
Dim esValido As Boolean
Do
entrada = InputBox("Ingrese un número (1-100):", "Entrada numérica")
If StrPtr(entrada) = 0 Then
' Se hizo clic en Cancelar
Exit Sub
End If
' Verificar si es un número válido
If IsNumeric(entrada) Then
numero = CDbl(entrada)
If numero >= 1 And numero <= 100 Then
esValido = True
Else
MsgBox "Ingrese un número entre 1 y 100.", vbExclamation
End If
Else
MsgBox "Por favor ingrese un número válido.", vbExclamation
End If
Loop Until esValido
MsgBox "Ingresó: " & numero, vbInformation
End Sub
Usa StrPtr(entrada) = 0 para distinguir entre Cancelar y entrada vacía. Si StrPtr devuelve 0, el
usuario hizo clic en Cancelar.
Resumen
InputBox y MsgBox son herramientas esenciales para la interacción con el usuario en VBA:
MsgBox:
- Usa combinaciones de botones apropiadas para la situación
- Agrega iconos para transmitir la importancia del mensaje
- Establece valores predeterminados seguros para operaciones destructivas
- Maneja valores de retorno para controlar el flujo del programa
InputBox:
- Usa
StrPtr()para distinguir Cancelar de entrada vacía - Valida la entrada antes de procesar
- Usa
Application.InputBoxpara selección de rangos y validación de tipos
Domina estas funciones para crear aplicaciones VBA amigables para el usuario.