Evitar seleccionar rangos en el código de macros

Muchos de los que se acercan a la programación de macros en VBA/Excel recurren inicialmente al grabador de macros, sin duda esta es una magnifica herramienta que en algunas ocasiones y dependiendo de la complejidad del problema que se quiera resolver, será más que suficiente. Algunas otras veces solo se quiere saber el código necesario para realizar alguna acción e incorporarlo a un código que ya se tiene.

El problema con el grabador de macros es que genera código basura, es decir código redundante que puede impactar la velocidad en la que se ejecuta una macro. Tuve la oportunidad de ver la ejecución de una macro que tardaba 2 días para generar reportes de métricas mensuales. Casi todo el código de esa macro utilizaba código grabado. No es malo utilizar código generado por la grabadora, el problema radica en no optimizarlo.

En Excel es necesario seleccionar primero las cosas antes de actuar sobre ellas. Por ejemplo, se selecciona la fila uno y se le aplica un formato en negrita. Sin embargo, en VBA raramente se tiene que seleccionar algo para hacer esto. El código generado por el grabador de macros genera código como el siguiente para poner en negritas la primera fila de la hoja de cálculo:

Rows("1:1").Select
Selection.Font.Bold = True

Pero fácilmente se puede optimizar de la siguiente manera:

Rows("1:1").Font.Bold = True

Al optimizar el código se obtienen dos ventajas. Disminución de líneas de código, ejecución más rápida del mismo.

Comentarios