Home > Bases de datos, Excel, Forms, Formularios, vba > Ejemplo de formulario de captura en Excel

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.

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

image

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

  1. Jaime Salazar
    July 27, 2011 at 22:14

    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

    • sergioacamposh
      July 30, 2011 at 10:24

      Qué versión de Excel utilizas ?

      • Jaime Salazar
        August 3, 2011 at 20:17

        Excel 2010

      • sergioacamposh
        August 4, 2011 at 23:59

        Entra al IDE de vba y ve al menú Herramientas > referencias. Ahí debe haber alguna referencia que haga falta. Desactívala y ve si funciona. Cualquier cosa con gusto le seguimos viendo.

  2. agustin
    August 2, 2011 at 09:59

    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
      August 4, 2011 at 23:50

      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
    November 26, 2011 at 11:06

    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
      November 26, 2011 at 18:08

      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. July 15, 2012 at 16:09

    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)

    • July 16, 2012 at 22:00

      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.

      • July 18, 2012 at 18:01

        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
    July 27, 2012 at 11:46

    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

    • July 27, 2012 at 12:37

      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. August 9, 2012 at 11:31

    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!

    • August 9, 2012 at 13:26

      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
    August 23, 2012 at 16:07

    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

    • August 25, 2012 at 15:33

      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
    September 11, 2012 at 20:16

    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
    September 11, 2012 at 20:17

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

    Gracias

  10. November 17, 2012 at 15:20

    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

    • November 18, 2012 at 09:36

      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

      • November 24, 2012 at 23:49

        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
    December 1, 2012 at 15:11

    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

    • December 1, 2012 at 15:19

      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
        December 1, 2012 at 15:53

        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…

    • December 4, 2012 at 09:05

      Por favor valida que tengas las últimas actualizaciones de tu Office, así como los Service Packs recientes.

      • Frank eduardo molina ramirez
        December 4, 2012 at 16:32

        Gracias… lo solucione bando el MSCOMCT2.OCX y registrandolo..

  12. Nacho
    July 21, 2013 at 13:15

    Muchas gracias por el aporte, me sirvió mucho el post…

    Saludos

  1. August 14, 2011 at 23:07

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s