Usamos la función InputBox de Excel para obtener la entrada del usuario. Es importante recordar incluir validaciones de datos correctos, esto asegurará que la entrada de datos correspondan con lo que el programa necesita.
Sintaxis del Inputbox en VBA
La función Inputbox presenta un mensaje al usuario, permitiéndole ingresar un valor en una caja de texto.
Los parámetros principales de esta función son:
Inputbox (Promt, Title, Default)
- El parámetro Prompt especifica la leyenda que mostrará la caja de mensajes.
- El parámetro Title especifica el título que llevará el cuadro de diálogo.
- El parámetro Default es el texto que mostrará la caja de texto (es opcional).
El aspecto más importante de InputBox es que nos devuelve una cadena con lo que haya ingresado el usuario en la caja de texto. Luego podemos realizar una tarea específica dependiendo del valor obtenido.
Veamos por ejemplo en la siguiente macro, en al que puede observar como se solicita un dato, donde "Ingrese cantidad" es la leyenda o prompt, y "Título" es el texto que se emplea como título, luego de anotar el valor, y presionar aceptar, el valor empleado es entregado a la variable "X"
Sub Test()
x = InputBox("Ingrese cantidad", "Título")
MsgBox x
End Sub
Sintaxis completa de Inputbox
lnputBox(prompt, title, default, left, top, helpfile, context, type)
Además de los tres elementos ya descritos, el Inputbox cuenta con:
left: es la distancia desde la parte izquierda de la pantalla.
top: es la distancia desde la parte superior de la pantalla.
helpfile, context: son datos opcionales, correspondiente al archivo de ayuda, no son de uso frecuente.
type: es opcional, sirve para identificar el tipo de dato a ser devuelto, los tipos datos pueden ser:
0: Una fórmula.
1: Un número.
2: Una cadena (texto).
4: Un valor lógico (Verdadero o Falso).
8: Una referencia de celda, como un objeto Range
16: Un valor de error, como #N/A.
64: Una matriz de valores
Por ejemplo si requerimos una referencia a una celda podríamos usar:
Private Sub ejemplo_inputbox()
Dim x As Range
Set x = Application.InputBox("Mensaje", "título", Type:=8)
x.Clear
x.Select
End Sub
Ejemplos de InputBox
Solicitar varios nombres usando Inputbox
A través del uso de la función InputBox, creamos una macro que nos permita registrar los nombres de las personas que consignaremos en la caja de información. 1º Creamos la macro:
Sub nombres()
Dim i As String
Dim a As Integer
Range("A1:A5").Select 'seleccionamos rango de trabajo
For a = 0 To Selection.Cells.Count 'realizar repeticiones para cada celda
i = (InputBox("Ingrese su nombre", "Nombre")) 'recuperamos las cadena del inputbox
ActiveCell.Offset(a, 0).Value = i 'bajamos por las celdas de la selección de 1 en 1
Next a
End Sub
2° Ejecutamos la macro y registramos los nombres de la siguiente manera:
2.1. Ejecutando la macro
(Para mayor visualización de la imagen, hacer click en la misma)
2.2. Digitar en la caja de texto los nombres a registrarse y luego aceptar
(Para mayor visualización de la imagen, hacer click en la misma)
Ejemplo elaborado por: Ricardo Najarro Chuchón
Descargar ejemplo: Función InputBox en VBA
Solicitar un nombre y colocarlo en una celda
A través del uso de la función InputBox, solicitaremos datos de los usuarios para que de esta manera accedan al programa. Para ello:
1° En la hoja de cálculo, insertaremos cuadros de texto Activex.
2° Hacemos doble click en el primer cuadro de texto y vamos cambiando los nombres en los respectivos caption. Asimismo introducimos la functión INPUTBOX para lograr que aparezca una caja de información solicitándonos datos personales:
Private Sub CommandButton1_Click()
Dim mensaje As String
Dim nombre As String
mensaje = "Por favor, escriba su nombre."
nombre = InputBox(mensaje)
Range("a2").Value = nombre
End Sub
3° Finalmente, probamos el resultado en la hoja de Excel.
Ejemplo elaborado por: Sara Ramos
Descargar Ejemplo: Ejemplo Inputbox en VBA
05/11/2013 a las 8:58 am
Hola tengo unas dudas
Cual es la diferencia entre usar Select y Activate para una unica celda?
GRacias
Walter
08/11/2013 a las 6:48 pm
Esta función es realmente importante para la programación en Excel con VBA. Permite el ingreso de datos. Hay que tener en cuenta que siempre devuelve una cadena por lo que será necesario convertir el resultado en un valor si se da el caso.
08/11/2013 a las 6:57 pm
Es una función realmente importante para la programación en Excel con vba. Permite el ingreso de datos. Hay que tener en cuenta que el tipo de datos que se devuelve siempre es una cadena (string) por lo que será necesario convertir el resultado en un valor en caso de ser necesario.
20/04/2014 a las 9:23 pm
Esta función es muy útil. Ya que gracias a esta se puede tener programas en vba más interactivos y de uso fácil ya que el usuario de estos programas, que usualmente no es el diseñador de los mismos, sabrá exactamente que es lo que debe ingresar.
21/04/2014 a las 9:44 am
En la quinta fila del código tenemos la siguiente expresión :
"For a = 0 To Selection.Cells.Count"
El comando cells está de más, basta con utilizar "Selection.Count".
31/05/2014 a las 8:56 pm
Esta función es útil para facilitar el ingreso de datos al usuario, pues muchas veces las macros tienen lugares específicos en donde ingresar los datos, lo cual generar errores al ejecutarla. Esta función ayuda reducir el error que se pueda cometer al ejecutar una macro asegurándonos de ingresar los datos de manera correcta y facilitando la tarea al operador.
12/07/2014 a las 8:08 pm
Es una función muy útil para llenar hojas de excel que requieran la entrada de gran cantidad de datos que necesitan ser registrados de una manera sencilla y que limite el márgen del error de la persona que la esta utilizando.
12/07/2014 a las 11:07 pm
Es un comando de VBA de gran utilidad para almacenar la información que se ingresa en una variable.
26/07/2014 a las 12:46 am
Esta función te permite ingresar información, esta puede ser validada con Do loop.
Ejemplo:
Do
Cantidad=Inputbox("Ingresar el número de productos")
Loop until Cantidad >0
06/09/2014 a las 12:18 pm
Daniel Castillo, me gustó tu código sin embargo la condicion para empezar las iteraciones debe ser que la variable i sea distinta a XXX
If i "XXX" Then 'para continuar con el siguiente nombre
y Loop While i "XXX" 'para verifiicar la finalizacion
06/09/2014 a las 12:22 pm
Daniel Castillo me gustó tu código, sin embargo debes establecer la condicion que la variable i sea distinta a "XXX" para que funcione correctamente
If i "XXX" Then , para continuar con la siguiente iteracion
y
Loop While i "XXX" , para verificar la finalizacion
12/09/2014 a las 7:48 pm
estoy tratando de usar esta macro de dniel, pero no me deja seguir en linea 5 me sale un error
Sub nombres()
Dim i As String
Range(“A1″).Select ‘iniciamos en A1
‘revisamos las celdas hasta encontrar la primera en blanco
Do While ActiveCell.Value “”
ActiveCell.Offset(1, 0).Activate
Loop
‘iniciamos el llenado de nombres hasta que indiquemos con XXX que terminamos
Do
i = (InputBox(“Ingrese el nombre (XXX=Fin)”, “Nombre”))
If i “XXX” Then
ActiveCell.Value = i
ActiveCell.Offset(1, 0).Activate
End If
Loop While i “XXX”
End Sub
14/09/2014 a las 4:31 pm
Interesante la rutina, me sirvió mucho para el ingreso de ciertos parámetros que requiere una función engorrosa de generación de números aleatorios que frecuentemente uso.
17/09/2014 a las 2:27 pm
Interesante ejemplo del INPUTBOX.
Saludos cordiales.
11/02/2015 a las 9:29 am
Yo lo hice así...
y resulta en cualquier selección de celdas.
Sub nombres2()
Dim i As String
Dim a As Integer
a = 0
For Each celda In Selection
i = InputBox("Ingrese el nombre: ", "Nombres")
ActiveCell.Offset(a, 0).Value = i
a = a + 1
Next
End Sub
18/09/2016 a las 5:40 pm
buenisimo gracias no es limitante
05/04/2015 a las 2:13 pm
He hecho un código un tanto distinto pero que funciona para lo mismo, solo que es más completo.
Lo que hace es recoger una selección cualquiera, revisa que tenga solo una columna (si tiene más de una tira error) y entonces empieza a mostrar cuadros de entrada para cada una de las celdas.
El código va como sigue:
Sub nombresauto()
Dim contador As Integer
Dim i As String
If Selection.Columns.Count > 1 Then
MsgBox "Tiene seleccionada más de una columna. Asegúrese de que su selección contiene solo una columna e intente de nuevo.", vbOKOnly + vbExclamation, "Error en la selección"
Else
For Each cell In Selection
cell.Value = (InputBox("Ingrese Nombre", "Nombre"))
Next
End If
End Sub
09/04/2015 a las 4:48 pm
Esta función me parece muy adecuada para el llenado de base de datos... yo soy nueva en esto, así que estoy intentando modificarla para ingresar fechas y que me devuelva una fecha posterior.
23/05/2015 a las 5:12 pm
Estimados amigos, me parece muy interesante esta macro con la función InputBox.
Para agregar el apellido en otra columna, he realizado otra macro, para lo cual he copiado la macro inicial y he realizado los siguientes cambios:
Nombre de la macro: "nombres" por "apellidos"
Rango de celdas: A1:A5 por B1:B5
Descripción en InputBox: "nombre" por "apellido".
De esta manera el apellido se copia en la columna B, manteniendo los nombres.
Sub nombres()
Dim i As String
Dim A As Integer
Range("A1:A5").Select 'selecccionamos rango de trabajo
For A = 0 To Selection.Cells.Count 'realizar repeticiones para cada una de las celdas
i = (InputBox("Ingrese su nombre", "Nombre")) 'recuperamos las cadena del input box
ActiveCell.Offset(A, 0).Value = i 'bajamos por las celdas de la selección de 1 en 1
Next A
End Sub
Sub apellidos()
Dim i As String
Dim A As Integer
Range("B1:B5").Select 'selecccionamos rango de trabajo
For A = 0 To Selection.Cells.Count 'realizar repeticiones para cada una de las celdas
i = (InputBox("Ingrese su apellido", "Apellido")) 'recuperamos las cadena del input box
ActiveCell.Offset(A, 0).Value = i 'bajamos por las celdas de la selección de 1 en 1
Next A
End Sub
24/05/2015 a las 9:52 am
Estimados amigos, a las macros que envié en comentario anterior le incluí una macro final que une las dos macros iniciales (nombres y apellidos) a fin de que, con esta última macro, me solicite ingresar nombres y apellidos sin necesidad de ejecutar cada macro por separado.
Sub nombres()
Dim i As String
Dim A As Integer
Range("A1:A5").Select 'selecccionamos rango de trabajo
For A = 0 To Selection.Cells.Count 'realizar repeticiones para cada una de las celdas
i = (InputBox("Ingrese su nombre", "Nombre")) 'recuperamos las cadena del input box
ActiveCell.Offset(A, 0).Value = i 'bajamos por las celdas de la selección de 1 en 1
Next A
End Sub
Sub apellidos()
Dim i As String
Dim A As Integer
Range("B1:B5").Select 'selecccionamos rango de trabajo
For A = 0 To Selection.Cells.Count 'realizar repeticiones para cada una de las celdas
i = (InputBox("Ingrese su apellido", "Apellido")) 'recuperamos las cadena del input box
ActiveCell.Offset(A, 0).Value = i 'bajamos por las celdas de la selección de 1 en 1
Next A
End Sub
Sub Nombre_Apellido()
nombres
apellidos
End Sub
04/07/2015 a las 5:05 pm
Esta función se podría llegar a utilizar para el bloqueo del mismo excel? Es decir, utilizar ese cuadro de dialogo como una opción para introducir una clave o algún tipo de código?