Mientras se ejecuta un programa, puede tener un parámetro que cambie el flujo condicionalmente. Este parámetro puede ser una entrada dependiendo del usuario† Por lo tanto, un programa VBA debe ser una forma de recibir información del usuario en tiempo de ejecución. Aquí es donde InputBox entra en escena. Otros idiomas tienen sus propias funciones integradas que funcionan de la misma manera.
Puede ver aquí un InputBox simple en Excel con solo el mensaje como parámetro:
Sintaxis del cuadro de entrada
Donde
Prompt
es el mensaje de cadena que se muestra al usuario.
Title
es la cadena que aparece en el título de la ventana de InputBox (en lugar de «Microsoft Excel» en la imagen de arriba)
Default
value es el valor que se muestra en el cuadro de texto de la ventana InputBox cuando aparece. También podemos proporcionar algunas instrucciones aquí.
X Position
es la posición de píxel en el eje x (en la pantalla) donde debería aparecer la esquina superior izquierda de InputBox y mostrarse en tiempo de ejecución.
Y Position
es la posición de píxel en el eje y (en la pantalla) donde debería aparecer la esquina superior izquierda de InputBox y mostrarse en tiempo de ejecución.
HelpFile
es la expresión (del tipo de datos cadena) que busca el archivo de ayuda que proporciona ayuda sensible al contexto para manejar el cuadro de diálogo.
Ayudar Context
ID es el ID numérico («Número de contexto de ayuda») que el «Autor de ayuda» asigna al «Tema de ayuda» apropiado.
La función de cuadro de entrada siempre devuelve solo una cadena† Entonces, si necesitamos datos de diferente tipo, debemos usar las funciones de conversión apropiadas proporcionadas por VBA.
*Todos los parámetros entre corchetes [] son opcionales. Pero si el parámetro < help file > se especifica, el parámetro < context > también se especificará y viceversa. Ambos parámetros deben usarse juntos o ambos deben omitirse.
Ejemplos de InputBox
Reciba un mensaje de cadena simple en tiempo de ejecución del usuario
Sub goto_demo() ' declare variables Dim str_age, int_age ' one goto label to iterate this in case the age provided by user is invalid get_age: ' get the age from the user strage = InputBox("Enter your age") ' convert it to an integer intage = CInt(strage) 'validate that the input is a number If IsNumeric(intage) Then ' validate and display if the user is a senior citizen If intage >= 60 Then MsgBox "You are a senior citizen." Else MsgBox "You are not a senior citizen. " End If Else MsgBox "Invalid value. Please try again. " GoTo get_age End If End Sub
Recibir información del usuario para calcular el área total del cilindro
Sub surf_area_cyl() ' declare variables Dim r, h, fsa, csa, tsa, pi ' assign values to known variables pi = 3.14 ' Receive inputs from user r = CInt(InputBox(" Enter the radius of the cylinder's sides in cm", "Calculate TSA of Cylinder", "Use only numbers. Do not use the units or any symbols")) h = CInt(InputBox(" Enter the height of the cylinder in cm", "Calculate TSA of Cylinder", "Use only numbers. Do not use the units or any symbols")) ' calculate area of base and top fsa = 2 * pi * (r ^ 2) ' calcuate the curved surface area csa = (2 * pi * r) * h ' calculate total surface area of the cylinder tsa = fsa + csa ' Display the total surface area of the cylinder MsgBox "The total surface area of a cylinder whose radius is " & r & " and height is " & h & " is " & tsa & " sq cm" End Sub
Función InputBox con todos los parámetros opcionales
Sub len_sentence() ' declare variables Dim sent ' assign value by receiving data from the user sent = InputBox("Enter a sentence", "This is a demo", "Your sentence goes here", 100, 300, ThisWorkbook.Path & "samplehelp.chm", 101) ' display the length of the received input MsgBox Len(sent) End Sub
El cuadro de diálogo InputBox no se muestra en el medio de la página porque las posiciones X e Y se especifican en el código.
Tenemos un botón adicional de «Ayuda». Al hacer clic en él, el usuario accede a la página de ayuda escrita por el autor de la ayuda.
Si no se especifica el ID del contexto de ayuda, pero la ruta del archivo de ayuda está en la lista de parámetros de la función InputBox, encontrará el siguiente error: «Error de tiempo de ejecución ‘5’: Argumento o llamada de procedimiento no válido».
Función InputBox con algunos parámetros opcionales
Sub name_demo() ' declare variables Dim name ' assign value by receiving data from the user name = InputBox("What is your name ?", , "Your sentence goes here", , 300) ' Simply display it with a normal sentence. MsgBox "You name '" & name & "' is a sweet name." End Sub
En este ejemplo, solo hemos proporcionado el eje Y, por lo que, de forma predeterminada, el InputBox está en el centro del eje X de la pantalla.
Conclusión
La función InputBox nos ayuda a recibir información del usuario en tiempo de ejecución. Con esta función podemos evitar la codificación dura de valores. Si bien la entrada dinámica es posible con InputBoxes, demasiados de ellos ralentizarán su programa mientras espera que los usuarios ingresen datos para continuar ejecutándose.
Si hay opciones para pasar datos a través de aplicaciones de back-end como MS. Access, MS Excel o SQL, que generalmente sería preferible. Deberíamos usar InputBoxes para recibir solo entradas de tiempo de ejecución real que no se pueden predecir. Eso hace que su código sea más robusto.