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
-
Formulario de captura.
-
TextBoxes de captura.
-
Control de calendario.
-
Comboboxes que son llenados con listas predefinidas.
-
CheckBoxes.
Imagen del formulario en acción
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
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
Qué versión de Excel utilizas ?
Excel 2010
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.
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
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.
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.
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.
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.
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
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.
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
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 ?
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
Si puedes puedo verlo para el ejmplo de este post y yo lo condiciono a mi caso particular
Gracias
Hola Gabriel.
Te comento que el Blog está dedicado a compartir ejemplos prácticos, pero me reservo a crear desarrollos completos bajo pedido, ya que no es objetivo del Blog.
Te puedes dirigir al siguiente post que trae alguna funciones de lo que comentas. Te puedes guiar en el ejemplo adjunto para adecuarlo a tus necesidades y si algo se te atora y nos da el tiempo, comentas. http://exceleinfo.wordpress.com/2012/07/07/modificar-datos-de-una-tabla-con-un-listbox-en-excel/
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
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.
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…
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).
Revisa este archivo https://skydrive.live.com/redir?resid=4509FEB32392C17C!2459&authkey=!AMCHT_pJxPrOJoc
Hola amigo, quieo descargar el ejemplo del formulario pero no lo encuentro, por favor ayudame
He actualizado el link. Ya lo puedes descargar.
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?
Que tal, otra vez yo, espero y también puedas re subir este ejemplo.
Gracias.
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.
Gracias.
Validé el link y está activo para que lo descargues sin problema.
Gracias, ya lo baje. Disculpa podrás ayudarme con un comentario que te puse https://blogs.itpro.es/exceleinfo/2014/02/02/formulario-de-captura-en-excel-que-guarda-datos-en-otra-hoja/
Saludos.
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.
Es el control Calendario el que no lo tienes en tu Windows 7.
Sigue los pasos del siguiente artículo: http://blogs.itpro.es/exceleinfo/2013/09/19/usar-el-control-date-and-time-picker-mscomct2-ocx-en-excel-sobre-windows-7-y-8-de-64-bits/
Muchas Gracias. Excelente.
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
en la computadora de mi oficina tengo office standard 2013 y no me funcionan muchos de tus formularios
Mil gracias, es increíble tu biblioteca, ojala todos fueran como tu.
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