Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Función InputBox en VBA

| 51 comentarios

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

Inputbox en VBA

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

Ejecutamos la macro y registramos los nombres de la siguiente manera:

2.1. Ejecutando la macro

1 300x141 Función InputBox en VBA

(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

2 300x201 Función InputBox en VBA

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

12 300x153 Función InputBox en VBA

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.

14 1 300x113 Función InputBox en VBA

Ejemplo elaborado por: Sara Ramos

Descargar Ejemplo: Ejemplo Inputbox en VBA

 

51 comentarios

  1. Hola tengo unas dudas
    Cual es la diferencia entre usar Select y Activate para una unica celda?

    GRacias
    Walter

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

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

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

  5. 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".

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

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

  8. Es un comando de VBA de gran utilidad para almacenar la información que se ingresa en una variable.

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

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

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

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

  14. Interesante ejemplo del INPUTBOX.

    Saludos cordiales.

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

    • buenisimo gracias no es limitante

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

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

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

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

  20. 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?

Página de comentarios 2 de 3
1 2 3

Deja una respuesta

Los campos requeridos estan marcados con *.