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. Esta macro me resulta importante para el llenado de bases de datos. Puede combinarse y repetirse tantas veces como se requiera para distintos rangos especificos.

  2. Se le podria incluir mas datos y ademas que te detecte si el dato registrado ya ha sido anhadido.Por ejemplo cuando se agregan nuevos clientes a una base de datos, se aolicita informacion basica como nombres, apellidos, documebto de identidad y datos de contacto.

  3. Al ejecutar esta macro resulta que se puede ingresar hasta cinco nombre distintos pero cuando vuelvo ha ejecutar la misma, esta sobreescribe los nombres ya existentes. Me podrian ayudar a perfeccionar este código para poder registrar y a su vez mantener los nombres escritos previamente y que pueda continuar en la siguiente fila en blanco? Me ayudaria mucho para los fines que persigo, gracias.

  4. Modificando el ejemplo, he colocado un indicador para que corte el ingreso de nombres sin reemplazar los que ya se encuentran en las celdas cada vez que se ejecuta la macro.
    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

  5. muy importante para el ingreso de los datos ojo ,hay que tener cuidado con los tipos de datos pueden ser numerico,string .... saber que tipo de datos vas ingresar para hacer tus calculos

  6. Esta funciòn es muy importante para realizar grandes bases de datos en la cual nos facilitara tanto para introducir cada uno de los datos que podamos ingresar y utilizando la programacion VBA nos facilitara el trabajo, esta funcion InputBox en VBA es una especie de ventana donde el usuario digita informacion pero esa informacion digitada debe guardarse en un lugar en donde debemos declarar variables para que ahi se almacene la informacion que deseamos compartir en nuestra base de datos.

  7. Al ejecutar la macro me pide ingresar seis nombres a pesar de que se han seleccionado cinco celdas, eso es porque el ciclo for va de 0 al numero de celdas seleccionadas es decir 5 lo que es seis por tanto lo modifiqué para que pida solo cinco nombres, añadiendo -1 al límite del for, quedando:

    Sub nombres()

    Dim i As String
    Dim a As Integer

    Range("F1:F5").Select
    For a = 0 To Selection.Cells.Count - 1
    i = InputBox("Ingrese el nombre: ", "Nombres")
    ActiveCell.Offset(a, 0).Value = i

    Next a

    End Sub

    • mmm, Entonces si pongo for a=1, si saldrán sólo 5 valores. Interesante.

      • Pero a partir de la segunda celda.

  8. Al código del ejemplo se añadio la líneas siguientes lineas dentro del bucle FOR:
    +------------------------
    If a = 4 Then
    Exit For
    End If
    +-------------------------
    La finalidad es para que sólo se ingresare 5 nombres según el rango eleccionado. El código completo es el siguiente:
    +--------------------------------------
    Sub Nombres()
    Dim i As String
    Dim a As Integer
    Range("A1:A5").Select
    For a = 0 To Selection.Cells.Count
    i = InputBox("Ingese su Nombre: ", "Nombres")
    ActiveCell.Offset(a, 0).Value = i
    If a = 4 Then
    Exit For
    End If
    Next a
    End Sub
    +----------------------------------------

  9. He realizado una modificación a la macro presentada, incorporando una validación solo númerica. Es útil para valores que el usuario debe ingresar y que sean únicamente números.

    Este es el código:

    Sub Valores()

    Dim i As String

    n = Worksheets("Hoja1").Range("a" & Worksheets("Hoja1").Rows.Count).End(xlUp).Row + 1

    INPUT_I:
    i = (InputBox("Ingrese el valor", "Valor"))

    If Not IsNumeric(i) And i "" Then
    MsgBox "INGRESE SOLO VALORES NÚMERICOS", vbInformation
    GoTo INPUT_I
    End If

    Worksheets("Hoja1").Range("a" & n).Value = i

    End Sub

  10. Estimados:
    Bien, si se prueba el MsgBox y se pulsa el boton ayuda, salta la ayuda de office, esto me hace pensar que estoy haciendo algo mal y por eso no salta mi ayuda… necesito alguna respuesta:

    Sub MessageBox()
    MsgBox "El proceso tardará 5 minutos ¿Desea Continuar?", 3 + 256 + 16384, "Copia de Seguridad.", "C:\ejemplo.chm", 71
    End Sub

  11. Definitivamente esta opción resulta practica para la creación de entornos visuales y botones.

  12. La función Inputbox es importante para el desarrollo de programas complejos, ya que permite enviar mensajes al usuario y a la vez almacenar información. Esta informacion permitira crear variables para un codigo complejo, por ejemplo al ser usada con la funcion InStrRev se podran realizar busquedas grandes o especificas, facilitando así el uso de las hojas de cálculo.

  13. Modifique en elago el codigo de Darío:
    espero les sirva.
    Sub Nuevo()
    Dim i As String
    Worksheets("Hoja1").Activate
    ActiveSheet.Range("A1").Activate 'iniciamos en A1
    'revisamos las celdas hasta encontrar la primera en blanco
    Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(1, 0).Activate
    Loop
    'iniciamos el llenado de nombres hasta que indiquemos con XXX que terminamos
    i = (InputBox("Ingrese el Nombre:", "Nombre"))
    Do While i ""
    With ActiveCell
    ActiveCell.Value = i
    ActiveCell.Offset(1, 0).Activate
    End With
    i = (InputBox("Ingrese el Nombre:", "Nombre"))
    Loop
    End Sub

  14. Asignándole varias variables yo puedo crear con este macros bases de datos de mis alumnos, pero quisiera saber si hay una forma de restringir la información a ingresar, osea si se le puede poner una cantidad límite de letras en el nombre o algo así

  15. Esta función me ha ayudado para poder realizar una pequeña encuesta. Ademas esta función es el inicio para la toma de información para distintas base de datos.

  16. En la macro se consideró que el rango de trabajo era desde la celda 1 hasta la fila 5. Sin embargo, al descagar el excel, esto aplicaba hasta la fila 6. A que se debe esto?

  17. El macro permite el ingreso de información de manera rápida, y la función nos recuerda a que corresponde la misma. Aun falta aprender el resto de parametros incluidos en el macros.

  18. También se puede usar para un mini censo. Esto lo usaron unos muchachos de mi empresa para obtener feedback sobre la snuevas politicas.

  19. Buen día amigos,

    Excelente función para ingresar datos; es importante validarlos también. Por mi parte he modificado la fila donde se usa la función COUNT porque la macro no terminaba cuando ingresabas los 5 datos.

    Para mejorar la

    For a = 0 To Selection.Cells.Count - 1

    Saludos

  20. esta función es realmente importante pues ayudará a que nosotros podamos guardar bases de datos es decir, que estas sean traspasadas desde el formulario al Excel automáticamente al ejecutar la macro.

Página de comentarios 1 de 3
1 2 3

Deja una respuesta

Los campos requeridos estan marcados con *.