Formulario de captura en Excel que guarda datos en otra hoja
Cuando deseamos que otras personas recaben datos siempre son de gran utilidad los formularios. Un formulario de captura nos permite recolectar sólo datos necesarios, ya que al tener campos estructurados y listas con opciones, evitamos que los usuarios escriban cosas que no necesitamos.
Además, si al formulario le añadimos macros, podremos tener nuestros datos en tablas para posteriormente manipularlos con facilidad.
Por qué no usar los formularios de vba
A esta pregunta siempre daré la misma respuesta: todo depende del gusto del diseñador.
En 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 datos en una hoja de Excel.
El ejemplo que les comparto incluye un formulario diseñado en celdas de una hoja de Excel, con bordes y colores que lo hacen ver un tanto minimalista.
Ver video Copiar datos a otra hoja de Excel con macros
#SUSCRÍBETE pare recibir en tu correo cada vez que publique un video nuevo.
Listas de validación de datos
Para que los usuarios de nuestro formulario sólo capturen la información necesario, el algunos campos usaremos la Validación de datos para que tengan listas con opciones. Las diferentes maneras de usar la Validación de datos las podremos ver en este artículo publicado en este mismo Blog.
Dónde quedan los datos capturados
Cuando el usuario termine de capturar los datos en el formulario, debe presionar el botón Guardar datos y éste ejecutará una macro que los enviará a otra de Excel en formato de tabla.
Código vba
A continuación el código usado para el ejemplo.
Option Explicit Sub Captura_Datos() 'Declaración de variables ' Dim strTitulo As String Dim Continuar As String Dim TransRowRng As Range Dim NewRow As Integer Dim Limpiar As String ' strTitulo = "Atención Telefónica" ' Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo) If Continuar = vbNo Then Exit Sub ' Set TransRowRng = ThisWorkbook.Worksheets("Datos").Cells(1, 1).CurrentRegion NewRow = TransRowRng.Rows.Count + 1 With ThisWorkbook.Worksheets("Datos") .Cells(NewRow, 1).Value = Date .Cells(NewRow, 2).Value = Format(Date, "dd") .Cells(NewRow, 3).Value = Format(Date, "mm") .Cells(NewRow, 4).Value = Format(Date, "yy") .Cells(NewRow, 5).Value = ThisWorkbook.Sheets(1).Range("C6") .Cells(NewRow, 6).Value = ThisWorkbook.Sheets(1).Range("C9") .Cells(NewRow, 7).Value = ThisWorkbook.Sheets(1).Range("C12") .Cells(NewRow, 8).Value = ThisWorkbook.Sheets(1).Range("C15") .Cells(NewRow, 9).Value = ThisWorkbook.Sheets(1).Range("F9") .Cells(NewRow, 10).Value = ThisWorkbook.Sheets(1).Range("F12") .Cells(NewRow, 11).Value = ThisWorkbook.Sheets(1).Range("F15") End With ' MsgBox "Alta exitosa.", vbInformation, strTitulo Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo) If Limpiar = vbYes Then With ActiveWorkbook.Sheets(1) .Range("C6").ClearContents .Range("C9").ClearContents .Range("C12").ClearContents .Range("C15").ClearContents .Range("F9").ClearContents .Range("F12").ClearContents 'ClearContents no funciona en celda combinada... .Range("F15").Value = "" End With Else End If ' End Sub
Referencias
Ejemplo de formulario de captura en Excel
Anexos
:: Descarga el ejemplo Formulario de captura en hoja de Excel.rar
Hola Sergio,
¿Podrían introducir datos varios usuarios simultáneamente?
Gracias.
Se podría hacer a menos que los datos los envíe a una base de Access o un motor como SQL.
Por ejemplo:
http://blogs.itpro.es/exceleinfo/2011/06/14/exportar-de-excel-a-access-mediante-formulario-de-vba/
Excel online te permite modificar varios archivos a la vez, pero no permite macros.
Magnifica Macro, muy útil. Muchas gracias
Buenas Tardes, no puedo bajar el ejemplo… podrias volver a subirlo ??
Excelente Ejemplo para capturar y guardar en una tabla. Gracias
Disculpa, algo sencillo y rápido que me puedas ayudar.
Tengo Hoja1 con 15 columnas en la primera columna tengo numero de Alumno y en la segunda el nombre y asi con mas información hasta la Columna O. (Es una tabla con información de mis Alumnos.
En la hoja 2, celda A1 Pongo el numero del Alumno
Y en la B1, C1 y D1 tengo la formula BuscarV para que me ponga la información que ocupo de dicho alumno.
Pero me gustaría con un botón y me supongo que con un macro.
Esa información de la B1, C1 y D1 me la ponga
Abajo apartir de la Fila 3 Columna A (A3, B3, C3) (no la quiero concatenada)
Si yo consulto otro alumuno en la celda A1
Que se registre con el botón en la siguiente Fila 4 (A4, B4, C4)
Y asi sucesivamente cuando yo consulte un alumno me registre con el botón ese alumno en la siguiente Fila.
Gracias y espero que me puedas ayudar.
Me acabo de registrar en tu blog. es grandioso.
Saludos.
Tengo un problema. hice todo tal cual y me resultó, pero sólo puedo ejecutar la macro (incluída la limpieza de celdas) estando dentro de la hoja “Datos”.
Quiero que se ejecute mientras estoy en la hoja “Captura”
Qué estoy haciendo mal?
Esta macro funciona donde estés siempre y cuando tu hoja Captura sea la primera de las pestañas y tengas una hoja llamada “Datos”.
Qué comportamiento tienes o qué error te arroja ?
Hola. En primer lugar quiero felicitarlos y agradecerles su trabajo.
Ahora las preguntas:
Estoy usando las primeras 19 filas de mi “Hoja Destino” para representar la información con gráficos. Cómo puedo hacer para que la macro agregue la información a partir de la fila 21 (en la 20 están los encabezados de la tabla).
Cuando protejo la Hoja Destino la Macro da Error. Necesito proteger esas primeras 20 Filas.
Es esto posible?
Desde ya muchísimas gracias! Disculpen las Molestias.
Hola hermano ¡
Oye pero como le harias si las dos ultimas filas a copiar (f12 y f15) fueran vinculos?
Porque a la hora de copiar los pasaria como datos.
Que formula ocuparias para que te la siguiera ordenando en la hoja “Datos”?
Gracias y buen aporte ¡¡
¿Y si se necesita que el formulario de captura para varias hojas de cálculo? ¿hau qye declarar cada hoja en la instrucción set y crear botones en el formulario para cada hoja de cálculo?
Hola buenas tardes Tengo una hoja de Excel con los siguientes columnas de datos (Puesto, Dorsal, Apellidos, Nombre, Año Nacimiento, Club, Tiempo) Tengo los datos de todos los participantes en una carrera y solo me quedan en blanco las columnas de datos A (Puesto) y H (Tiempo).
Para hacer los resultados de la carrera me van a dar una lista en papel con los dorsales de los corredores por el orden de entrada en meta y los tiempos correspondientes a cada dorsal.
Necesito hacer un formulario o una macro que metiendo el dorsal correspondiente me localice el corredor mostrandome los datos en pantalla y permitiendo intraducible el puesto y el tiempo que le corresponde para guardar esos datos en la hoja y seguir el mismo procedimiento con el siguiente corredor hasta terminar de introducir todos los puestos y tiempos.
Y finalmente queria colocar un botón de macro que al pincharlo ordenara automáticamente a todos los corredores una vez introducidos los puestos de todos por la columna 1 (puesto). Aunque esta operación como es fácil efectuarla a mano tampoco es imprescindible.
Como puedo hacerle para que cada que abra mi formulario que realize en EXCEL, muestre solo la pantalla donde se captura la información
Hola Buenas tardes, una duda a ver si podeis echarme una mano , se puede hacer mas de un formulario, en un mismo fichero ? tendría que hacer módulos o macros separadas ? Estoy intentandolo pero solo me funciona el primero .Muchas gracias
Muchas Gracias por el aporte! ES muy bueno y sencillo! Me gustaría ver la posibilidad de poder incluir una fórmula que valide que todos los campos fueron llenados y en caso que no, arroje un mensaje. Esto sería al darle click al Sub CommandButton1_Click. El tema es que no sé en que parte del código colocarlo para que se ejecute antes del mensaje de comprobación de que los datos están correctos. Gracias!
Qué tal.
Revisa el siguiente artículo: http://www.exceleinfo.com/bases-de-datos/macro-para-validar-campos-vacos-de-un-formulario-al-dar-de-alta-en-excel/
Muchas Gracias Sergio!!! Muy amable!.
Ahora me encuentro quebrándome la cabeza para que en vez de arrojarme los nombres de las celdas, me indique el nombre del campo que falta. (Ej. “Falta rellenar el siguiente campo: “Teléfono”).
Saludos y excelente la página! 🙂
Puedes revisar el siguiente artículo y adecuar el código. En el ejemplo se valida campo por campo mediante sentencias IF, pero cuando son muchos campos no lo recomendaria.
http://www.exceleinfo.com/bases-de-datos/ejemplo-de-formulario-de-captura-en-excel/
Hola Sergio
La verdad que no se mucho de excel y menos de macro. por lo que la parte de código es inentendible para mi. Pero lo que vos armaste arriba es lo que necesito salvo algunas diferencias y quiero saber si es posible, con esta base, reformularlo para lo que busco.
Las diferencias son que los datos no son de un formulario sino que de unas celdas con información y la otra es que los resultados los necesito en otro archivo ubicado en otro directorio.
En resumen, tengo un archivo que es un examen que se autocorrige y los datos de alumno más el resultado del examen quiero que pasen a una base de datos que se actualice automáticamente cuando terminan el examen.
Espero haber sido claro y desde ya muchas gracias
Hola me podrían ayudar en algo, tengo un registro en la hoja 1 y me agrado la idea de el formato de captura, lo empezare a usar, solo que en el registro y clasificando cada uno d los datos y por decir los artículos vendidos se cree una copia en la hoja 2 y los devueltos en la hoja 3 pero que se pasen automáticamente al momento de registrarlos en la hoja 1, eso ya lo logre hacer por medio de una función pero esta muy pesado el documento quisiera crear una macro que me lo genere
Hola, que tal muy buena información, muchas gracias.
Si bien esto es de hace algún tiempo atrás espero puedan ayudarme.
Lo que necesito hacer es un formulario muy similar, la diferencia es que las personas a las cuales debo ingresarle los datos ya están registradas, entonces necesito que los datos ingresadas se vayan directamente a la columna del nombre de la persona.
Desde ya muchas gracias por su ayuda.