Input Box en Visual Basic: Solicitar Datos al Usuario
Resumen
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.
Hola! Envío mi reto de simulación de préstamo, para conocer el valor a pagar mensualmente con el valor del préstamo y el número de cuotas.
Genial Maria, gracias por el aporte.
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!
Buenas tardes profe, dejo captura del código de una calculadora de ganancias para realizar ventas. Al final se puede ver los diferentes datos que se le pide al usuario, hasta llegar al msj final.
Hola Ricardo. Excelente el ejercicio, pero tienes un error de cálculo que es muy común. Para calcular el precio de venta (PV) de un producto conociendo su costos (en tu ejercicio lo llamas precio con impuestos) debes utilizar la siguiente fórmula:
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 :
Input:
Output:
Muy buena. 👍🏽
Cálculo del IMC:
InputBox
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 AsStringnombre = InputBox("Por favor, ingrese su nombre:","Nombre")MsgBox "Hola, "& nombre &"!"EndSub
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 AsVariant numero = InputBox("Ingrese un número:")If IsNumeric(numero)ThenIf numero Mod2=0Then MsgBox numero &" es un número par.", vbInformation,"Número par"Else MsgBox numero &" no es un número par.", vbInformation,"Número impar"EndIfElse MsgBox "Debe ingresar un número válido.", vbExclamation,"Error de entrada"EndIfEndSub
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")
End Sub
Excelente Álvaro. Lo he probado y está muy bien. Sólo una cosa: escribiste Dim b y luego en el msgbox colocaste la variable como a
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!
Eh realizado una subrutina para sacar la raíz cuadrada, cubica, a la cuarta, a la quinta,....
Terrific! Thank you for sharing!
Sub rutina en la que se simula el ingreso de un usuario y contraseña :)
PublicSubuser()Dim usuario AsStringDim contrasenia AsString usuario =InputBox("Ingrese su usuario","Platzi Team") contrasenia =InputBox("Ingrese su contraseña","Platzi Team") a =MsgBox("Bienvenido "& usuario,,"Platzi Team")EndSub
Hola comunidad,
Decidimos crear una subrutina privada para convertir el peso de una persona considerando la gravedad que existe en la luna.
Utilizamos la función Round para reducir los decimalesa 2 de nuestro double
Round(numero, cantidad decimales)
Saludos,
Escriban cualquier código, lo que sea, los ayudará a recordar.
Que significa Dim?
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.
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
Hola comunidad Platzi.
Realice una subrutina para saber cuantas debes ordenar en un restaurante.
Acá dejo el resultado de mi ejercicio 👇
En mi caso lo que hice fue realizarle una pregunta al usuario para devolverle un mensaje confirmando o negando su respuesta.
Calcula de edades
Public Sub edad1()
Dim nacimiento As Date
Dim años As Integer
nacimiento = CDate(InputBox("Ingrese su fecha de nacimiento dd/mm/aaaa", "EDAD"))
años = Year(Date) - Year(nacimiento)
If Month(Date) < Month(nacimiento) Then
años = años - 1
ElseIf Month(Date) = Month(nacimiento) And Day(Date) < Day(nacimiento) Then
años = años - 1
End If
MsgBox "La edad exacta es: " & años & " años", , "EDAD"
End Sub
Les comparto mi ejemplo para pedir nombre:
Public Sub PedirNombre()
Dim nombre As String
nombre = InputBox("Por favor, escribe tu nombre:", "Registro de Usuario")
MsgBox "Hola " & nombre & ", bienvenido."
End Sub
porq sale esto, lo pase a otro modulo y me sigue saliendo
me pasa igual
Hola, envío mi reto
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?