Los programas desarrollados en VBA pueden interactuar con el usuario a través de los Userforms y los cuadros de dialogo, los cuales no son más que mensajes emergentes con información de interés. Los cuadros de diálogo pueden ser de dos tipos: los informativos conocidos como Message Box (MsgBox) y los cuadros de ingreso de datos, mejor conocidos como InputBox, de los que hablaremos en este tutorial.
Cuadros de ingreso de datos o InputBox
Son ventanas emergentes de mensajes usadas para que el programa solicite el ingreso de alguna información de interés necesaria para continuar con el flujo de trabajo de tu macro.
La información ingresada en los InputBox es normalmente asignada a una variable, así que la estructura básica para mostrar un InputBox es:
Variable = InputBox(Mensaje)
Con el ejemplo mostrado a continuación, el valor introducido en el InputBox será almacenado en la variable “strName”
Sub test()
strName = InputBox("Please enter your Name")
End Sub
El mensaje que aparece en el InputBox puede ser de tipo String (texto), numérico o Booleano (puedes visitar nuestro tutorial de variables para más información), pero VBA lo convertirá automáticamente en un texto (String). Su longitud máxima es de 255 caracteres. Si tu mensaje excede esa longitud, será automáticamente truncado por VBA a los 255 caracteres.
En algunas ocasiones será conveniente almacenar el mensaje que quieres mostrar en una variable para su uso posterior, similar al procedimiento mostrado en el siguiente ejemplo.
Sub test()
If Gender = "Female" Then
Message = "Hello Mrs."
Else
Message = "Hello Mr."
End If
strName = InputBox(Message & ", please input your Name")
End Sub
Así, el mensaje que se mostrará en el InputBox podría depender del resultado de algún procedimiento realizado por tu macro en VBA.
Argumentos opcionales de los InputBox
Los InputBox cuentan con parámetros que permiten mejorar la experiencia del usuario y el programador. Para ello te mostramos como utilizar algunos de los argumentos opcionales y sus posibles estructuras de código en VBA.
Los argumentos disponibles son:
- Arg1: representa el mensaje que va a ser mostrado en el cuadro de diálogo. Es el único argumento obligatorio. A menos que se indique lo contrario, los valores asignados a este argumento serán convertidos automáticamente en texto para ser mostrado en el InputBox: un número o Booleano será interpretado por VBA como un texto.
- Arg2: es un argumento opcional que corresponde al encabezado del InputBox, normalmente una variable de tipo String. Este argumento puede ser también de tipo numérico o booleano, pero será interpretado por VBA como un texto.
- Arg3: es un argumento opcional que indica el texto por defecto que aparecerá en el campo de escritura del InputBox. El argumento puede ser una variable capaz de ser interpretada por VBA como un texto.
En el ejemplo de la imagen, el argumento 3 tiene el valor de “Your name here”
- Arg4 y Arg5: son argumentos opcionales en los que se especifica la posición del InputBox (en puntos) dentro de la pantalla, determinada desde la esquina superior izquierda de la pantalla. Si decides establecer la ubicación de tu InputBox, debes declarar estos dos argumentos en conjunto; en caso de que declares sólo uno, VBA no tomará la información y tu InputBox tendrá su posición por defecto.
- Arg6: este argumento se usa para especificar el tipo de dato de entrada del InputBox. Por ejemplo, si deseas almacenar una variable de tipo Booleana deberás asignarle a este argumento el valor 4. En la siguiente tabla te describimos la lista completa de opciones para este argumento.
Valor | Descripción |
0 | Fórmula |
1 | Número |
2 | Texto (Selección por defecto) |
4 | Booleano |
8 | Rango |
16 | Error |
64 | Arreglo |
Especificación de los argumentos opcionales en el InputBox
Los argumentos pueden ser especificados usando una de estas dos estructuras:
Método 1:
Variable = InputBox (Arg1, Arg2, Arg3, , , Arg6)
Método 2:
Variable = Application.InputBox( _
prompt:= Arg1, Title:= Arg2, _
Default:=Arg3, _
Left:= Arg4, Top:= Arg5, _
Type:= Arg6)
Te recomendamos usar el método 2 por tener algunas ventajas con respecto al método 1. Entre ellas:
- Permite tener una mejor comprensión del código ya que se indica de manera explícita el nombre del argumento
- Es una estructura más flexible para ti como programador, pues te permite alterar el orden de los argumentos dentro de la estructura. Por ejemplo, podrías escribir el argumento Type:= Arg6 en la primera posición, antes que prompt:= Arg1.
- Solo es necesario especificar los argumentos que se quieren usar. Así evitas tener que dejar espacios en blanco separados por comas, como en el caso del método 1.
Ejemplos de uso del inputbox en VBA
InputBox con valor por defecto y encabezado
Método 1:
Sub test()
Message = "Hello Mrs., please enter your Name"
Header = "Hello"
Default_Message = "Your name here"
strName = InputBox(Message, Header, Default_Message)
End Sub
Método 2:
Sub test()
Message = "Hello Mrs., please enter your Name"
Header = "Hello"
Default_Message = "Your name here"
strName = Application.InputBox( _
prompt:=Message, Title:=Header, _
Default:=Default_Message)
End Sub
InputBox con valor por defecto, encabezado y control de ubicación en la pantalla
Este ejemplo te muestra como ubicar el InputBox en la esquina superior izquierda de la pantalla.
Método 1:
Sub test()
Message = "Hello Mrs., please enter your Name"
Header = "Hello"
Default_Message = "Your name here"
strName = InputBox(Message, Header, Default_Message, 0, 0)
End Sub
InputBox con valor por defecto, encabezado y entrada numérica
Cuando uses este tipo de InputBox, si la información ingresada no es un valor numérico se mostrará un mensaje que indicará un error en el tipo de entrada, pero no detendrá tu macro, sino que volverá a mostrar el InputBox solicitando que introduzcas de nuevo la información.
Método 2:
Sub test()
Message = "Hello Mrs., please enter your ID number"
Header = "Hello"
Default_Message = "Your Id Number here"
IDNum = Application.InputBox( _
prompt:=Message, Title:=Header, _
Default:=Default_Message, _
Type:=1)
End Sub
InputBox con valor por defecto, encabezado y entrada de texto
La entrada de datos como texto es la opción por defecto de VBA, así que puedes utilizar esta opción o sencillamente omitir la instrucción “Type” en el código.
Debes tener en cuenta que con esta modalidad de InputBox, si ingresas un número, por ejemplo 10, la macro lo reconocerá como un texto dicho número, es decir “10”; Esto significa que no podrás hacer operaciones matemáticas con la información introducida si el tipo de variable seleccionada en el InputBox es un texto.
Método 2:
Sub test()
Message = "Hello Mrs., please enter your ID number"
Header = "Hello"
Default_Message = "Your Id Number here"
IDNum = Application.InputBox( _
prompt:=Message, Title:=Header, _
Default:=Default_Message, _
Type:=2)
End Sub
InputBox con valor por defecto, encabezado y entrada lógica
En este tipo de InputBox, si la información ingresada no es un valor lógico (verdadero o falso) se mostrará un mensaje de error en el tipo de entrada, pero no detendrá tu macro, sino que volverá a mostrar el InputBox solicitando que introduzcas de nuevo la información.
Método 2:
Sub test()
Message = "Hello Mrs., please input choice"
Header = "Hello"
Default_Message = "Your choice (True or False)"
Answer = Application.InputBox( _
prompt:=Message, Title:=Header, _
Default:=Default_Message, _
Type:=4)
End Sub
Otro detalle de este tipo de InputBox es que la entrada lógica debe ser escrita en el idioma que tengas configurado tu Office, por ejemplo:
- Si el idioma es español, entonces tus entradas válidas serán “Verdadero” o “Falso”.
- Si el idioma es Inglés, entonces tus entradas válidas serán “True” o “False”
InputBox con entrada de rangos
Este tipo de InputBox es muy útil cuando deseas hacer la selección de un rango de celdas como información de entrada para tu macro. Cuando se despliegue este InputBox, Excel te permitirá seleccionar las celdas que desees y automáticamente escribirá en el cuadro la información del rango como naturalmente se hace en Excel: InicioDelRango:FinDelRango
Si la información ingresada no proviene de la selección de celdas o no tiene la estructura válida de un rango, se mostrará un mensaje de error en el tipo de entrada, pero no detendrá tu macro, sino que volverá a mostrar el InputBox solicitando que introduzcas de nuevo la información.
Una particularidad de este tipo de InputBox es que, por referirse a un grupo de celdas, la información del cuadro no se asigna a una variable sino a un objeto, por ello es necesario emplear la declaración “Set” tal como lo observas en el ejemplo.
Método 2:
Sub test()
Message = "Please select your data range"
Header = "Range selection"
Default_Message = "Your range here"
Set SelRange = Application.InputBox( _
prompt:=Message, Title:=Header, _
Default:=Default_Message, _
Type:=8)
End Sub
Ahora bien, si deseas obtener información particular del rango seleccionado en el InputBox, puedes utilizar estos comandos que aquí te explicamos:
Información del rango | Estructura | Ejemplo |
Ubicación | Variable = ObjetoInputBox.Address | Var = SelRange.Address |
Primera Fila | Variable = ObjetoInputBox.Row | Rgn_Row = SelRange.Row |
Primera columna | Variable = ObjetoInputBox.Column | Rgn_Col = SelRange.Column |
Cantidad de celdas | Variable = ObjetoInputBox.CurrentRegion.Count | Rgn_Count = SelRange.CurrentRegion.Count |
Cantidad de filas | Variable = ObjetoInputBox.Rows.Count | Rgn_RowCount = SelRange.Rows.Count |
Cantidad de columnas | Variable = ObjetoInputBox.Columns.Count | Rgn_ColCount = SelRange.Columns.Count |
Con estas herramientas que has aprendido podrás ampliar las posibilidades de tus programas en VBA, así como mejorar tu experiencia y la del usuario. No dejes del practicar estos trucos y veras la diferencia.
Tienes alguna duda?…. Contactanos