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

msgbox_basico.bas
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:

ConstanteValorDescripción
vbOKOnly0Solo botón Aceptar (predeterminado)
vbOKCancel1Botones Aceptar y Cancelar
vbAbortRetryIgnore2Botones Anular, Reintentar, Ignorar
vbYesNoCancel3Botones Sí, No, Cancelar
vbYesNo4Botones Sí y No
vbRetryCancel5Botones Reintentar y Cancelar
msgbox_botones.bas
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:

ConstanteValorDescripciónIcono
vbCritical16Error crítico
vbQuestion32Pregunta
vbExclamation48Advertencia⚠️
vbInformation64Informaciónℹ️
msgbox_iconos.bas
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
チェック
Los botones e iconos se pueden combinar sumándolos. Ejemplo: vbYesNo + vbQuestion

Manejo de valores de retorno

MsgBox devuelve un valor basado en qué botón hace clic el usuario:

ConstanteValorBotón presionado
vbOK1Aceptar
vbCancel2Cancelar
vbAbort3Anular
vbRetry4Reintentar
vbIgnore5Ignorar
vbYes6
vbNo7No
msgbox_valor_retorno.bas
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

inputbox_basico.bas
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

inputbox_validacion.bas
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.InputBox para selección de rangos y validación de tipos

Domina estas funciones para crear aplicaciones VBA amigables para el usuario.

#VBA #InputBox #MsgBox #Interfaz de usuario #Diálogo