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.

Formulario de captura en Excel

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.

Lista de validación de datos en Excel

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.

Guardar datos en otra de Excel

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

Validación de datos en Excel

Ejemplo de formulario de captura en Excel

Anexos

:: Descarga el ejemplo Formulario de captura en hoja de Excel.rar

You may also like...

20 Responses

  1. Luis Mc says:

    Hola Sergio,

    ¿Podrían introducir datos varios usuarios simultáneamente?

    Gracias.

  2. Emilio De Pablo Blasco says:

    Magnifica Macro, muy útil. Muchas gracias

  3. Punisher says:

    Buenas Tardes, no puedo bajar el ejemplo… podrias volver a subirlo ??
    Excelente Ejemplo para capturar y guardar en una tabla. Gracias

  4. Punisher says:

    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.

  5. Maria Isabel Ampuero Poblete says:

    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?

    • sergioacamposh says:

      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 ?

  6. Agustín says:

    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.

  7. alejandro ruiz says:

    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 ¡¡

  8. will_of_ockham says:

    ¿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?

  9. Carlos Rionda says:

    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.

  10. Alvaro says:

    Como puedo hacerle para que cada que abra mi formulario que realize en EXCEL, muestre solo la pantalla donde se captura la información

  11. Emilio De Pablo Blasco says:

    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

  12. Quirino Ríos says:

    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!

  13. Gustavo says:

    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

  14. Nax says:

    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

  15. German says:

    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.

Leave a Reply

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