Cuando necesitas que el usuario proporcione información directamente dentro de una macro de Excel, el InputBox se convierte en tu mejor aliado. Esta herramienta permite crear ventanas emergentes que solicitan datos específicos, los almacenan en variables y los utilizan para ejecutar operaciones de forma dinámica, algo especialmente valioso en subrutinas donde no existen argumentos de entrada.
¿Qué es InputBox y cómo funciona en VBA?
El InputBox es una instrucción de Visual Basic for Applications que genera una ventana emergente donde el usuario puede escribir un valor. A diferencia del MessageBox, que solo muestra información, el InputBox recibe datos de entrada y los devuelve al código para ser procesados [01:06].
Al escribir InputBox() y abrir paréntesis, VBA muestra los argumentos disponibles:
Prompt: el texto que aparece en la ventana, por ejemplo "Escribe el numerador".
Title: el título de la ventana (opcional; si no se especifica, aparece "Microsoft Excel" por defecto).
Los argumentos entre corchetes son opcionales, y VBA asigna valores default cuando no se definen [01:52].
¿Por qué es necesario asignar el resultado a una variable?
Un detalle fundamental es que el valor que ingresa el usuario debe almacenarse en una variable. Si solo escribes InputBox("Escribe el numerador") sin asignarlo, el dato se pierde y no podrás utilizarlo en ninguna operación posterior [02:17].
La forma correcta es declarar primero la variable con Dim y luego asignarle el resultado:
vb
Dim numerador As Integer
numerador = InputBox("Escribe el numerador")
De esta manera, la información proporcionada por el usuario queda disponible para cualquier cálculo dentro de la función o subrutina.
¿Cómo combinar InputBox con funciones y subrutinas?
En una función, ya se pueden recibir argumentos directamente. Sin embargo, el InputBox permite solicitar datos adicionales que no fueron definidos como parámetros. En el ejemplo de la clase, la función Div recibe el denominador como argumento y pide el numerador mediante InputBox [02:44].
Al ejecutar Div(3) desde la ventana de inmediato, aparece la ventana emergente solicitando el numerador. Al escribir 12 y presionar OK, el resultado de la división se muestra con un MessageBox [03:08].
¿Por qué InputBox es esencial en las subrutinas?
Las subrutinas (Sub) no aceptan argumentos de entrada como las funciones. Por eso, cuando necesitas que el usuario proporcione información, el InputBox es la única vía para obtener esos datos [03:30].
El ejemplo completo de una subrutina con InputBox luce así:
vb
Public Sub DivS()
Dim num As Integer
Dim den As Integer
num =InputBox("Numerador","División")den =InputBox("Denominador","División")Dim a
a =MsgBox(num / den,,"División")
End Sub
Al ejecutar esta subrutina [04:48], aparecen dos ventanas consecutivas: una para el numerador y otra para el denominador. Después, un MessageBox muestra el resultado de la operación.
¿Qué es el tipo de dato Variant y cuándo se usa?
Cuando declaras una variable con Dim sin especificar el tipo de dato con As, VBA la define automáticamente como Variant [03:58]. Este tipo acepta cualquier valor: números, texto o fechas. Aunque es flexible, lo recomendable es especificar el tipo (como As Integer) para que el código sea más eficiente y predecible.
Otro concepto importante es el uso de una variable genérica para almacenar el resultado de un MsgBox cuando se incluyen argumentos adicionales. En el ejemplo, la variable a cumple esa función sin necesidad de ser utilizada después [05:02].
¿Cómo practicar con InputBox?
Para reforzar lo aprendido, considera estos pasos:
Crea una subrutina que pida dos números con InputBox.
Realiza una operación matemática con esos valores.
Devuelve el resultado al usuario con un MsgBox que incluya un título descriptivo.
Comparte una captura de pantalla de tu código en los comentarios y cuéntanos qué operación elegiste implementar.
Input Box en Visual Basic: Solicitar Datos al Usuario
si agregamos un input para otra variable que sea la tasa efectiva anual, y agregamos el calculo de la cuota según esa tasa en el msgbox, podriamos hacer un simulador con tasa variable. Buenisimo el aporte! gracias!
Teniendo presente que para HOY 29/11/2022 a las 13:41 el exchange es:
1 USD = 4812.9428 COP
PublicFunctionexchange()Dim num AsDoubleDim a
num =InputBox("Input amount for COP to USD","Exchange") a =MsgBox(num &" Colombian Pesos = "&Round(num /4812.9428,4)&" US Dollars",,"Exchange")EndFunction
Prueba Un salario minimo 2022 en dolares equivale a :
En VBA, InputBox es una función que muestra un cuadro de diálogo donde el usuario puede ingresar un valor. Este cuadro de diálogo permite obtener información directamente del usuario, como un número, texto u otra información relevante para tu aplicación.
prompt es una cadena de texto que se muestra como mensaje o instrucción para el usuario.
[title] (opcional) es una cadena de texto que especifica el título del cuadro de diálogo.
[default] (opcional) es un valor predeterminado que se muestra en el cuadro de texto de entrada.
[xpos] y [ypos] (opcional) son las coordenadas x e y que definen la posición inicial del cuadro de diálogo.
Ejemplos
Preguntar nombre y saludar
Sub ObtenerNombre()
Dim nombre As String
nombre = InputBox("Por favor, ingrese su nombre:", "Nombre")
MsgBox "Hola, " & nombre & "!" End Sub
Este código muestra un cuadro de diálogo donde se le solicita al usuario que ingrese su nombre. El valor ingresado se guarda en la variable nombre. Luego, se muestra un MessageBox que muestra un saludo utilizando el nombre ingresado.
Verificar Numero Par
Sub VerificarNumeroPar()
Dim numero As Variant
numero = InputBox("Ingrese un número:")
If IsNumeric(numero) Then
If numero Mod 2 = 0 Then
MsgBox numero & " es un número par.", vbInformation, "Número par"
Else
MsgBox numero & " no es un número par.", vbInformation, "Número impar"
End If
Else
MsgBox "Debe ingresar un número válido.", vbExclamation, "Error de entrada"
End If
End Sub
Hola! les dejo el resultado que obtuve, mi sub rutina busca elevar el número deseado a la potencia indicada por el usuario.
Public Sub potencia()
Dim numero As Integer
Dim exponente As Integer
Dim b
numero =InputBox("Ingrese número","Potencia")exponente =InputBox("Ingrese exponente","Potencia")a =MsgBox(numero ^(exponente),,"Resultado de la potencia")
Hice un intento sencillo con texto para juntar nombre, me pareció algo genial sacarlo del contexto de la clase y probar con las demás herramientas que hemos visto. Gracias!
Es la abreviación de dimensión y es usado en Visual Basic para declarar variables.
Normalmente es puesta en un modulo de VBA después de una Subrutina para referirnos al termino declarado en lugar de escribir el termino una y otra vez.
Es el equivalente a la declaración de una variable en programación la diferencia es que a esta le ponemos de inicio Dim antes del nombre de la misma.
Investigué como se imprimen los datos en el MsgBox en líneas diferentes y se hace con vbCrLf que provoca un enter y se posiciona al inicio de la nueva linea. el resultado se ve así:
Esa interfaz esta muy bonita. Que version de Excel tienes?
Hola, cree una subrutina con ayuda de chatgpt en donde usando el inputbox damos un correo y mandamos un PDF al correo escrito con las filas seleccionadas en el Range :)
PublicSubConvertirPDFyEnviarCorreo() ' Seleccionar el rango de celdas que se desea convertir a PDFRange("A1:F20").Select ' Especificar la ruta de salida del archivo PDFDimRutaPDFAsStringRutaPDF="C:\Escritorio\archivo.pdf" ' Exportar el rango de celdas seleccionado a un archivo PDFActiveSheet.ExportAsFixedFormatType:=xlTypePDF,Filename:=RutaPDF,Quality:=xlQualityStandard,IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=False ' Crear un nuevo mensaje de correo electrónico
DimOutlookAppAsObjectDimOutlookMailAsObjectDim correo_destinatario AsString
'box correo destinatario
correo_destinatario =InputBox("escribe el correo del destinatario","correo")SetOutlookApp=CreateObject("Outlook.Application")SetOutlookMail=OutlookApp.CreateItem(0) ' Adjuntar el archivo PDF al correo electrónico
OutlookMail.Attachments.AddRutaPDF ' Configurar las propiedades del mensaje
WithOutlookMail.To= correo_destinatario
.BCC="".Subject="Prueba Excel".Body="Sebas confirma la prueba".SendEndWithSetOutlookMail=NothingSetOutlookApp=NothingEndSub