Depurar una macro (2 minutos actuando)

3 envíos / 0 nuevos
Último envío
luismigueldelepe
Imagen de luismigueldelepe
Offline
última acción: Hace 5 años 6 meses
alta: 20/07/2018 - 07:44
Puntos: 245
Depurar una macro (2 minutos actuando)

Hola de nuevo a todas y todos. Estoy preparando un cuaderno docente para evaluar a mis estudiantes. Hasta aquí algo normal, pero estoy tratando que sirva para todo mi centro. Por lo tanto, poco a poco e ido metiendo configuraciones, macros, etc. para que de un solo libro original puedan usarlo todos los profes sin importar curso o materia.

Poco a poco se ha ido complicando la cosa y gracias a la ayuda de mi mejor amigo, así como varios foreros del foro, he ido añadiendo y adaptando macros.

Estoy muy contendo en general, pero hay una macro inicial que hay que ejecutar al comienzo del curso para configurar el libro y que dura 2 minutos!... si alguien con conocimientos observa la macro se echará las manos a la cabeza seguro... por eso lanzo mi archivo para ver si alguien es capaz de depurar el código o si no tiene remedio (ahora es operarativo y funciona).

Explico aquí un poco el objetivo de la macro: en la hoja "INICIO" hay un botón que pone "Crear cuaderno" que tiene una macro asociada. Esta macro lo que hace es que rescata de una hoja (llamada "PERFILES") unos estándares de aprendizaje y los pega como comentarios en la columna B de las hojas llamadas "UDI" (en la que aparecen los estándares pero solo con números). Según el curso escogido en la hoja INICIO, estos estándares (que son oficiales publicados en normativa) cambian, y hay que ejecutar la macro para que actualice y evaluar al alumnado según los estándares de su curso correspondiente.

Además, la misma macro rescata los nombres de los estudiantes y los pega como comentarios en la columna A de cada hoja llamada UDI (en la que aparecen los estudiantes solo con números).

Esto es así para poder tener las columnas A y B de las hojas UDI estrechitas y quede estético, pero tengan como comentarios el recorrido expresivo completo de los estudiantes y estándares de aprendizaje respectivamente.

La macro en cuestión asociada a dicho botón se llama "com_dinámicos".

Espero que al menos se pueda medio entender lo que hace la macro. La verdad es que he intentado varias posibilidades, y como está es lo que mejor he conseguido. Muchas gracias. Os va a suponer un reto...

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
He revisado un poco por

He revisado un poco por encima tu macro. Se me ocurren un par de cosas que se pueden hacer para acelerar las cosas, y otra que se puede hacer para mejorar la experiencia de usuario.

Para acelerar, lo primero que suelo probar es utilizar al principio:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Al fijar el cálculo a manual, tenemos que asegurarnos de que al terminar la macro lo devolvemos a automático. Para eso haremos:

On error goto fin
.
.
.
tu código
.
.
.
:fin
Application.Calculation = xlCalculationAutomatic


Otra cosa que suele funcionar es no trabajar directamente sobre las celdas, sino sobre matrices en memoria. Vas haciendo cálculos, vas asignando valores a elementos de tu matriz, vas redimensionando la matriz según vayas necesitando filas... Y solo al final copias toda la matriz de una vez a tu hoja. Esto es un poco más complejo de realizar en tu caso, pues no estás modificando celdas adyacentes.


Finalmente, lo que se puede hacer para mejorar la experiencia de usuario es poner una barra de avance. Para eso te puedes diseñar un formulario. Tu botón llamaría a la función formulario.show, y en tu formulario tendrías una llamada a tu macro en el evento OnActivate, por ejemplo. A partir de ahí, a medida que van avanzando los bucles puedes ir recalculando la longitud de tu barra de avance.

Respecto a esto último, y con permiso de Paco, te enlazo a un post que escribí sobre cómo hacer una barra de progreso sencilla, y otro que escribió mi amigo Quique que hace algo un poco menos sencillo, pero que funciona mejor.


Un saludo

luismigueldelepe
Imagen de luismigueldelepe
Offline
última acción: Hace 5 años 6 meses
alta: 20/07/2018 - 07:44
Puntos: 245
Muchas gracias por tu tiempo.

Muchas gracias por tu tiempo. Ya he conseguido hacer una barra de progreso usando formularios. Me ha parecido una idea obligatoria.