Ejemplo de formulario de captura en Excel

En esta ocasión presento un formulario de captura, con validaciones, que ingresará los datos capturados en una tabla de Excel.

Cómo funciona ??

Se presenta una tabla de Excel, con 14 campos. Mediante un botón se lanza un formulario que nos permitirá capturar datos. Cada TextBox, ComboBox y CheckBox tiene una validación que no permite ingresatos los datos capturados si algún objeto está vacío.

Los mejores videos de Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

En el video mostramos paso a paso cómo crear este ejemplo.

 Objetos

  1. Formulario de captura.
  2. TextBoxes de captura.
  3. Control de calendario.
  4. Comboboxes que son llenados con listas predefinidas.
  5. CheckBoxes.

Imagen del formulario en acción

Ejemplo de formulario de captura en Excel

Ejemplo de formulario de captura en Excel

Código del formulario

Private Sub UserForm_Activate()
'LLENADO DE COMBOS
    Me.cmbMarcaCte.RowSource = "lstMarca"
    Me.cmbMarcaKit.RowSource = "lstMarca"
    Me.cmbStatus.RowSource = "lstStatus"
    Me.cmbPromocion.RowSource = "lstTipoPromo"
    Me.cmbSuper.RowSource = "lstSupers"
End Sub
'---------------------------------------------------------------------------------------
' Module    : frmCaptura
' Author    : Sergio A Campos H, exceleinfo.wordpress.com
' Date      : 25/06/2011
' Purpose   : Ejemplo de captura de datos
'---------------------------------------------------------------------------------------
'
Private Sub cmdRegistrar_Click()
'INICIO DE VALIDACIONES
    largo = txtNumero.TextLength
    If largo <> 10 Or Not IsNumeric(txtNumero.Value) Then
        MsgBox "El número debe ser a 10 dígitos y debe ser número", vbCritical, empresa
        txtNumero.SetFocus
    Else
        If cmbMarcaCte.Value <> cmbMarcaKit.Value Or txtModelCte.Value <> txtModelKit.Value Then
            MsgBox "El modelo del cliente debe ser el mismo que nos aparezca en Proveedor", vbCritical, empresa
            cmbMarcaCte.SetFocus
        Else
            If cmbMarcaCte = "" Or txtModelCte = "" Or cmbMarcaKit = "" Or txtModelKit = "" Then
                MsgBox "Algunos de los datos de la marca y modelo están vacíos", vbCritical, empresa
                cmbMarcaCte.SetFocus
            Else
                If cmbStatus = "" Then
                    MsgBox "No se ha seleccionado un status", vbCritical, empresa
                    cmbStatus.SetFocus
                Else
                    If txtCir = "" Then
                        MsgBox "No se ha ingresado la circular", vbCritical, empresa
                        txtCir.SetFocus
                    Else
                        If cmbPromocion = "" Then
                            MsgBox "No se ha seleccionado una promoción", vbCritical, empresa
                            cmbPromocion.SetFocus
                        Else
                            If cmbSuper = "" Then
                                MsgBox "No se ha seleccionado un Supervisor", vbCritical, empresa
                                cmbSuper.SetFocus
                            Else
                                If chkPromoV = FALSO Or chkPromoA = FALSO Or chkAjusteInt = FALSO Or chkComtInt = FALSO Then
                                    MsgBox "Algún(os) de los pasos no ha sido completado ", vbCritical, empresa
                                    chkPromoV.SetFocus
                                Else
                                    'Call Desproteger
                                    'ALTA DE LOS REGISTROS
                                    Set TransRowRng = ThisWorkbook.Worksheets("base").Cells(1, 1).CurrentRegion
                                    NewRow = TransRowRng.Rows.Count + 1
                                    With ThisWorkbook.Worksheets("base")
                                        .Cells(NewRow, 1).Value = txtNumero
                                        .Cells(NewRow, 2).Value = cmbMarcaCte
                                        .Cells(NewRow, 3).Value = txtModelCte
                                        .Cells(NewRow, 4).Value = dtpServicio
                                        .Cells(NewRow, 5).Value = cmbStatus
                                        .Cells(NewRow, 6).Value = txtCir
                                        .Cells(NewRow, 7).Value = cmbPromocion
                                        .Cells(NewRow, 8).Value = cmbSuper
                                        .Cells(NewRow, 9).Value = cmbMarcaKit
                                        .Cells(NewRow, 10).Value = txtModelKit
                                        .Cells(NewRow, 11).Value = chkPromoV
                                        .Cells(NewRow, 12).Value = chkPromoA
                                        .Cells(NewRow, 13).Value = chkAjusteInt
                                        .Cells(NewRow, 14).Value = chkComtInt
                                    End With
                                    GoTo fin
                                    '
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
    'Call Proteger
    Exit Sub
fin:
    Unload Me
    ThisWorkbook.Worksheets("base").Activate
    'Call Proteger
End Sub

:: Descargar el ejemplo EXCELeINFO – captura en formulario

You may also like...

45 Responses

  1. Jaime Salazar says:

    Hola Sergio.
    Me pareció interesante la macro, pero al descargarla e iniciarla me da un error de depuración en el cual indica que no puede encontrar el proyecto o la biblioteca.
    ¿puedes ayudarme con eso?

    Cordiales saludos

    Jaime Salazar

  2. agustin says:

    Hola me pasa lo mismo que a Jaime, estoy usando la versión 2010, el error sale en la primer linea de la siguiente macro:

    Private Sub cmdRegistrar_Click()
    ‘INICIO DE VALIDACIONES
    largo = txtNumero.TextLength

    puede tener que ver con la versión utilizada?

    Saludos

    • sergioacamposh says:

      Qué error en específico te marca ??

      La instrucción sirve para validar que el TextBox sólo tenga números de 10 dígitos.

  3. Christian says:

    Muchas gracias, me ha sacado de un gran apuro ya que no soy programador de VB y/o excel, si me pudieras orientar con lo suguiente te lo agradeceria, si ya una ves que tienes la captura deseas hacer la impresión de cada registro? supongamos que lo quieres para capturar los datos del empleado de la nomina y requieres q te imprima cada registro en un formato ya determinado.

    • sergioacamposh says:

      Que tal. Aquí lo que podrías hacer es hacer una plantilla con el formato que deseas en otra hoja del libro y mediante la función BUSCARV(Excel 2003)/CONSULTAV(Excel 2010) traerte los datos que ya capturaste.

  4. johk0563 says:

    míster: tengo una hoja de cálculos con un sistema de comprobante de números , pero deseo crear una forma sencilla de ingreso de datos como la que muestras,
    sin entrar a la hoja y se pueda utilizar desde fuera de exel,
    es personal, te mandaría una copia para que la estudies ,
    mi mail es” jorge_rosaromero@hotmail.com
    nota: solo ingreso números de 2 cifras, en 20 lineas y en 24 columnas( dias al mes)

    • Hay que precisar dos cosas: si pretendes que el ingreso de los datos sean fuera de Excel, entonces para qué usarías Excel ??, igual puedes subir el archivo a un sitio gratuito y enviarme el link, pero no me puedo comprometer en desarrollarte ningún archivo, en cambio sí a tratar de apoyar en dudas que tengas.

      • johk0563 says:

        míster no es que sea fuera de exel, es que me sea mas practico el ingresar los números , antes de tener que recorrer la lista, y que a su bes me diga cuales de los 100 puntos (productos y herramientas ) fueron usadas, le envió el archivo como rar con fotos de las artesanías y un txt explicándole los motivos agradecería me ayudara, desde ya mil gracias por su respuesta y mil mas por su atención.
        descargue de aquí por favor: https://rapidshare.com/files/3741213550/Desktop.rar
        Jorge Hernandez

  5. Ariel says:

    Excelente!!, creo que tus soluciones son muy acertivas, este formulario esta muy bueno, gracias por compartir tus conocimientos.
    Tengo una consulta que hacerte, no se si es posible hacerlo: debo manejar una bodega con diversos productos, todos con un ID 10 digitos no repetibles. pero debo recibirlos(input), y despacharlos(output), el tema es que quiero hacerlo con una pistola capturadora de codigo de barras. que al mometo de capturar un codigo llene la base de datos de stock, y que la rellene automaticamente con informacion de otra base de datos de produccion.?

    Saludos

    • Gracias por los comentarios.

      Las pistolas de códigos de barras, al ser dispositivos de entrada, hacen lo mismo que un teclado pero sin escribir el número, sólo se pasa por el código de barras y se captura en la aplicación que tengas abierta.

      Se me ocurre que cuando se capture el código en Excel, se realice una fórmula de BUSCARV y/o CONSULTAV para que te traiga los datos de la otra base que tienes.

  6. Buen día, descargué tu proyecto y lo abrí en Office 2010, al dejar los campos en blanco para que me muestre los errores menciona que no se puede encontrar el proyecto o la biblioteca, me envía a esta sección del código

    Private Sub cmdRegistrar_Click()
    ‘INICIO DE VALIDACIONES
    largo = txtNumero.TextLength

    Además, al ingresar un registro lleno, no lo escribe en la tabla, como si el botón Registrar no hiciera nada. ¿A qué se debe y cómo podría corregirlo?

    Gracias!

    • En la venta del IDE de vba (Alt + F11), revisa en el menú Herramientas > Referencias, que tengas marcadas las opciones:

      Visual basic for applications
      Microsoft Excel 14.0 Object Library
      Microsoft Forms 2.0 Object Library

  7. carlos says:

    Hola amigo se ve sabes mucho y espero me puedas ayudar, tengo echo un archivo como para manejar un pequeño almacen, pero son varias personas las q pueden entrar al archivo y modificar informacion, la captura de la info la hago por medio de un formulario, mi duda es como puedo recuperar informacion en caso de cometer un error a la hora de usar un formulario, es decir ya introduci unos valores con el formulario, pero me di cuenta que cometi un error, como puedo deshacer dicha accion. ( el boton deshacer no me sirve para cosas realizadas con formularios). Gracias y espero tu respuesta

    • Hola Carlos:

      La cuestión con las macros, es que como no son funciones que provee en sus herramientas, no hay manera fácil de dar un Deshacer. Para el caso si introduciste un valor equivocado en el formulario, el poner mensajes de confirmación de tal manera que la persona que captura la información valide los datos antes de guardarse.

      No sé si el caso que me mencionas es para el ejemplo de este post o tienes un caso particular diferente a este ?

  8. Gabriel says:

    Hola, soy nuevo en programación.
    Y me gusto lo que haces.

    Puedes ayudarme a programar un boton de borrado de registro, un para actualizar datos en un registro, y una barra registros para poder moverme entre los registros

    Gracias

  9. Gabriel says:

    Si puedes puedo verlo para el ejmplo de este post y yo lo condiciono a mi caso particular

    Gracias

  10. hola necesito tu ayuda amigo tengo que llevar la captura de inventarios y tengo una base de datos pero yo creo que tu me puedes dar mejores ideas se ve que eres bueno ya que tengo q capturar y se me hace muy agobiante tal vx tengas algo por ahi gracias por tu atencion

    • Para la captura de inventarios siempre es más recomendable utilizar un lector de código de barras para agilar el proceso y evitar errores de captura.

      En todo caso, se pueden capturar los artículos por un código único, el cual debe estar definido en tu base de datos.

      Tal vez te interese este ejemplo

      • mira mi trabajo es de capturar 5 hojas y las tengo q capturar tal cual en excel pero se enlazan pk las existencias finales de un inventario es la existencia inicial de otro son dos turnos al dia necesito agilizar todo este proceso pk llevo retrazo de una semana

  11. Frank eduardo molina ramirez says:

    Buen dia sergio… este ejemplo me sirve mucho para un trabajo que tengo de la U y quiero adaptarlo a mis formulario… mi consulta es como puedo agregar ese opcion de fecha que tienes en este ejemplo he mirado y no encuentro de donde la direccionaste o la llmaste no logro ubicar su oprigen si me puedes colaborar mi msn es tecnisis-@hotmail.com o al gmail frank900501@gmail.com

    • Hola Frank:

      Para la fecha inserté el control Date Time Picker. Está en la misma paleta donde está el Button, ComboBox, ListBox. Si no lo encuentras, da click derecho en esa paleta y elije Controles adicionales. Ahí lo encuentras.

      • Frank eduardo molina ramirez says:

        en mi poratatil no me aparece para agregarle ese control pero en mi pc de mesa si…. eso a que se debe… por que si agrego eso y el dia de la presentacion no me funciona quedo mal…

  12. Ledger146 says:

    Hola estimado,
    el ejemplo me ayudó con capturar los valores de un combofix,
    sería interesante si de un frame sólo grabe 01 opcion o valor escogido a la hoja de excel.
    Es decir, grabar los valores de un frame que contengan multiples opciones (option button) y que grabe sólo la que hemos escogido (opción única).

  13. OSCAR says:

    Hola amigo, quieo descargar el ejemplo del formulario pero no lo encuentro, por favor ayudame

  14. Sergio says:

    Buenos Dias soy principiante en macros y quiero aprenderlos ahorita necesito crear un archivo en excel el cual tenga 3 botones y que me direccionen a una tabla en la cual pueda ingresarle fotos, tendras algun ejemplo?

  15. Punisher says:

    Que tal, otra vez yo, espero y también puedas re subir este ejemplo.
    Gracias.

  16. Punisher says:

    Si solo puedes subir uno… entonces puedes subir el otro

    https://blogs.itpro.es/exceleinfo/2014/02/02/formulario-de-captura-en-excel-que-guarda-datos-en-otra-hoja/
    Me serviría mas el otro, pero igual si puedes subir ambos, de una vez te agradezco tu ayuda.
    Me gustan tus ejemplos en tu blogs…
    Saludos.

  17. Fabian Artunduaga says:

    Hola, saludos, me estoy integrando al mundo de Excel.
    Excelente todo!

    gracias por compartir.

    Estoy probando el formulario de ejemplo, pero me genera el error que adjunto en las imagenes, me puedes ayudar.,gracias.

  18. salvador lopez says:

    Tengo un problema de manejo de datos: El error es de que el dato almacenado en la celda por ejemplo Teléfono dice “Numero almacenado como texto” y no me deja después hacer uso de el para algún procedimiento. Pero me gustaría una solución en código por que en algunos casos esa información de esa hoja esta protegida. gracias

  19. Cesar says:

    en la computadora de mi oficina tengo office standard 2013 y no me funcionan muchos de tus formularios

  20. Dennys Panozo says:

    Mil gracias, es increíble tu biblioteca, ojala todos fueran como tu.

  21. JES DUE says:

    Buen Día

    Me podrían ayudar?

    Tengo que limitar un textbox a ser numérico y solo a 11 posiciones, cuando se capturen menos de 11 y se quiera pasar a otro textbox salga el mensaje de error; tengo lo siguiente:
    Private Sub textbox_Change()
    If Not IsNumeric(textbox) And _
    textbox.Text “” Then
    textbox.Text = “”
    MsgBox “Solo Formato Numérico a 11 posiciones”, vbCritical, “Atención”
    End If
    End Sub

  1. August 14, 2011

    […] una entrada pasada, llamada Ejemplo de formulario de captura en Excel exponía un ejemplo con un formulario creado en el IDE de Visual Basic para aplicaciones (vba) y […]

  2. December 31, 2012

    […] Ejemplo de formulario de captura en Excel […]

  3. February 2, 2014

    […] otro artículo les comparto un formulario diseñado en el IDE de vba que usa el mismo código para dar de alta los […]

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: