sábado, 30 de agosto de 2014

Grabación de un Formulario

Archivo de Excel utilizado: excelavanzado_grabacion_formulario.xlsm

Veamos cómo crear un formulario y como incorporar los valores a una base de datos de forma automática con una macro que grabe los registros simplemente pulsando un botón. La macro que haremos no requiere programación de código y se realiza con la grabadora de macros.

Primer Vídeo

En este vídeo veremos cómo se crea el formulario usando una de estas dos herramientas.
  • Validación de datos
  • Controles de formulario

Segundo Vídeo

Realizaremos de forma manual la incorporación de los datos del formulario a una base de datos y luego crearemos una macro con grabadora que permita automatizar el proceso. De esta forma para alimentar la tabla que se crea lo único que hemos de hacer es rellenar y seleccionar los distintos valores del formulario y cuando ya los tengamos pulsaremos un botón que lanza la macro y se añade el nuevo registro a la base de datos.


Tercer Vídeo

Vamos a retocar un poco el código que ha generado la grabadora de macros. El objetivo es conseguir que los nuevos registros de la base de datos no se queden arriba sino que se incorporen en la parte baja de la tabla.

18 comentarios:

  1. En el vídeo, referente a la grabación de un formulario, cuando insertas la fila de datos definitiva, lo haces de manera que quede por encima de la última encuesta realizada.
    Existe alguna posibilidad, sin tener que entrar en programación, de que
    dicha fila, quede por debajo de la anterior.
    Gracias y un cordial saludo.

    ResponderEliminar
  2. Hola Juan.
    He creado el tercer vídeo para dar respuesta a tu planteamiento. Requiere una pequeña modificación en el código. Así nos vamos introduciendo en la programación VBA.
    Un saludo.

    ResponderEliminar
  3. Muchas gracias, me has facilitado mucho el trabajo para poder estudiar los formularios, antes, lo hacia uno encima de otro y al final del trabajo tenía que ordenarlos y la mayoría de las veces se te olvidaba.
    Abusando un poco de tu disposición, no se si este tema lo vas a tratar durante el curso, el tema es que he visto en una entrada anterior, referente a los subtotales, como lo desarrollabas, yo trabajo con una hoja de calculo en la que tengo incluido todos los datos de facturación de clientes y proveedores, teniendo los importes en una columna, ya sea base, iva, total, etc, esta facturación se diferencian gracias al número de proyecto. Mediante la función SUMA.SI.CONJUNTO, saco los datos totales de clientes y proveedores, pero cuando necesito sacar los de un proyecto concreto, utilizo la misma función introduciendo condiciones, pero tengo que hacer dos operaciones, primero calcular los importes y luego filtrar, mi cuestión es si hay alguna forma de hacerlo con la función SUBTOTAL, teniendo en cuenta que necesito tener el total por proyecto y diferenciando el cliente y el proveedor, una vez que hago el filtro.
    Gracias por tu tiempo, y no se si ha alguien más le ha pasado este problema.

    ResponderEliminar
    Respuestas
    1. Hola Juan.
      Me alegra ver que ha sido de utilidad para ti la grabación de formularios. Es simplemente un ejemplo de lo que se puede llegar a hacer con macros con grabadora y en algunos casos algún pequeño retoque del código.
      El otro caso que planteas creo que también se podría resolver con una tabla dinámica e incluso usando formulas matriciales.
      Lo bueno de usar los comentarios del blog es que cualquiera que tenga un caso similar puede aportar su propia solución.
      Un saludo.

      Eliminar
  4. Adolfo buenos días y muchas gracias por sus aportes. Le agradezco si me puede indicar que modificación se puede hacer para que exista sólo un registro por número o fecha (para mi caso), que salga una alerta indicando que ya existen datos para la fecha escogida y que se modifique si da aceptar. Tengo un listado de registros por fechas (sólo se acepta uno por día y el listado lo logré generar gracias a sus indicaciones de formulario y macro y al aporte mejorado gracias a la consulta que le hizo Juan Rodríguez), que si digito una fecha anterior o reciente ya incluida en el listado me pregunte si deseo modificarla o no, actualizándola o no. Espero haberme hecho entender y de nuevo muchas gracias. Saludos

    ResponderEliminar
  5. Hola!

    Desde el minuto 2:50 del video 2 se me ha solucionado un problema que tenia de hace tiempo.
    Grcs!!

    ResponderEliminar
  6. Cordial Saludo,

    Primero, gracias por este recurso que nos está suministrando.

    Segundo, apenas estoy aprendiendo Macros y Visual Basic, pero me gustaría saber: ¿Por qué se le debe poner "Yes" en la parte de "Header"? ¿Cuál es la intención de esto?

    Muchas Gracias.

    ResponderEliminar
    Respuestas
    1. Hola Daniel.
      Tengo que indicar que si se están usando cabeceras que son los nombres de campo de la fila 25.
      Esto no es algo extraño ya que al ordenar a mano (sin macro) también tenemos que indicar si en el rango de ordenación que se da se incluyen o no las cabeceras. Puedes ordenar a mano y comprobarlo.
      Un saludo.

      Eliminar
  7. Hola Adolfo, gracias por lo tutoriales, son muy útiles.

    Quisiera saber como puedo agregar la fecha y hora en que se graba cada formulario. He agregado las columnas y cuando estoy grabando la macro registro los valores con CTRL+, y CTRL+: pero estos quedan fijos.

    Gracias, saludos.

    ResponderEliminar
    Respuestas
    1. Hola Sebastian.
      Supongo que lo que deseas es añadir un campo (columna) a la base de datos que se va formando que contenga la fecha, la hora, los minutos y los segundos del momento preciso en el que se pulsó sobre el botón Grabar que lanza la macro.
      Para ello vamos a usar la columna A que hasta ahora la teníamos como margen sin darle ningún uso.

      En la celda A23 escribe la fórmula =AHORA()
      Esta fórmula te da la fecha y la hora actuales del sistema. Si tu ordenador está bien puesto en fecha y hora te dará estos valores con precisión.
      Para que se vea bien necesitas poner esta celda la A23 y la anterior, la A22 con el formato de celda personalizado siguiente: dd-mmm-aaaa h:mm:ss
      De esta forma verás incluso los segundos.

      Luego debes cambiar en la macro las referencias a la columna B. Donde ponga una B debes poner una A. Por ejemplo, donde pone
      Range("B23:J23").Copy
      Range("B22").Select
      ahora debe poner
      Range("A23:J23").Copy
      Range("A22").Select
      Y así debes hacer con todas las referencias a la columna B, que las debes transformar por referencias a la columna A, con una excepción. Donde dice Key:=Range("B25") debe segur diciendo lo mismo. Esta no la cambies.
      Espero que te sea de ayuda.
      Un saludo.

      Eliminar
  8. Realmente muy interesante y bien explicado , lo felicito

    ResponderEliminar
  9. Felicidades, y muchas gracias por su trabajo.

    ResponderEliminar
  10. Buenos dias Adolfo. De mucha ayuda este tutorial. Tengo un problema al aplicarlo. La fórmula para obtener el último número para asignar, luego que se insertan celdas copiadas en la Base de datos, la fórmula "=MAX(B26:B1000000)" queda modificada a "=MAX(B27:B1000001)".
    Si se insertan mas celdas copiadas, el rango de la función MAX aumenta en 1.
    Sabes a que se debe este comportamiento?
    Uso Excel 2016
    Muchas gracias por su atención.
    Oscar Suárez

    ResponderEliminar
    Respuestas
    1. Hola Oscar.
      Gracias a ti por detectar un error, ya que efectivamente la fórmula de la celda B23 cambia cada vez que lanzamos la macro. Para solucionarlo he modificado la expresión para que el máximo lo calcule arrancando desde la celda B25 que no varía. La fórmula quedaría así:

      =MAX(B25:B1048576)+1

      Lo que sucedía antes es que si el máximo arranca de la celda B26, como esta se desplaza hacia abajo al lanzar la macro, la fórmula también se desplazaba hacia abajo, aunque el máximo se seguía calculando bien. Ya está solucionado y el fichero actualizado.
      Una magnífica observación, así todos ganamos. Gracias.
      Un cordial saludo.

      Eliminar
    2. Muchas gracias por la respuesta. Esta es una solución mucho mas elegante que la que encontré.
      Mi solución es en una celda oculta, tener la fórmula como texto, esto es sin el = inicial, luego antes de finalizar la macro, seleccionar esa celda, en la barra de la formula, seleccionar el texto MAX(....), Ctlr+C, seleccionar B26, en el teclado pulsar = y luego Ctrl+V, intro.
      De esa forma se regenera la fórmula.
      Saludos
      Oscar Suárez

      Eliminar
  11. Buenos días Sr. Aparicio me sirve mucho sus tutoriales, le sigo hace años, tengo una duda con respecto al formulario, en una columna hago una suma en cabecera y al insertar la macro me deja de sumar la fila introducida, me aumenta en 1 fila la formula, la pongo con valores absolutos y hace lo mismo, podía ayudarme para que sumara siempre la fila introducida, muchas gracias.

    ResponderEliminar