Saltar al contenido

Uso de cuadros de entrada de VBA, con ejemplos

inputbox 01 simple Uso de cuadros de entrada de VBA, con ejemplos

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:

Campo de entrada "Introduzca su edad"

Sintaxis del cuadro de entrada

=CuadroEntrada( † [ < Title > ] † [ < default value > ] † [ < X position > ] † [ < Y position > ] † [ < help file > , < Help Context ID> ] †

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
Las partes de un cuadro de entrada: solicitud, título y valor de cadena predeterminado
Mensaje: El área total de un cilindro de radio 6 y altura 22 es 1055,04 cm cuadrados

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.

Cuadro de entrada que dice "Tu frase viene aquí."

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».

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.

Preguntas de InputBox "¿Cuál es su nombre?"

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.