ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Acelerar y optimizar las macros


Enviado por   •  3 de Diciembre de 2012  •  Trabajo  •  586 Palabras (3 Páginas)  •  646 Visitas

Página 1 de 3

I. ACELERAR Y OPTIMIZAR LAS MACROS

1.1. AL COMIENZO DE LAS MACROS

a. Apagar el parpadeo de pantalla

Lo hacemos con la instrucción: Application.screenupdating=False

Evita los movimientos de pantalla que se producen al seleccionar celdas, hojas y libros

b. Apagar los cálculos automáticos

Lo hacemos con la instrucción: Application.calculation=xlCalculationManual

Evita que se recalcule todo cada vez que se pegan o modifican datos

c. Apagar los eventos automáticos

Lo hacemos con la instrucción: Application.EnableEvents=False

Evita que se disparen macros de evento si las hubiere

d. Apagar visualización de saltos de página

Lo hacemos con la instrucción: ActiveSheet.DisplayPageBreaks = False

Sirve para evitar algunos problemas de compatibilidad entre macros Excel 2003 vs. 2007/2010

En resumen, siempre debemos comenzar las macros así:

Application.screenupdating=False

Application.calculation=xlCalculationManual

Application.EnableEvents=False

ActiveSheet.DisplayPageBreaks = False

.

1.2. AL FINAL DE LAS MACROS

a. Borrar contenido de portapapeles

Lo hacemos con la instrucción: Application.CutCopyMode = False

Permite limpiar el portapapeles en caso de haber copiado datos

Además debemos volver a su estado original las instrucciones con las que comenzamos la macro.

En resumen, siempre debemos finalizar las macros así:

Application.screenupdating=True

Application.calculation=xlCalculationAutomatic

Application.EnableEvents=True

ActiveSheet.DisplayPageBreaks = True

Application.CutCopyMode = False

.

OTRAS TECNICAS UTILES

a. Usar la instrucción WITH

Se usa para evitar tener que referenciar un mismo objeto muchas veces

Ejecución leeenta…

Sheets(1).Range(“A1:Z1″).Font.Italic = True

Sheets(1).Range(“A1:Z1″).Font.Interior.Color = vbRed

Sheets(1).Range(“A1:Z1″).MergeCells = True

Ejecución rápida!

With Sheets(1).Range(“A1:Z1″)

.Font.Italic = True

.Font.Interior.Color = vbRed

.MergeCells = True

End With

b. Evitar la instrucción SELECT

Se genera sobre todo en las macros grabadas

La mayoría de las veces no es necesario seleccionar para cumplir el objetivo

Ejecución leeenta…

Range(“E1″).Select

Selection.Copy

Range(“D10″).Select

ActiveSheet.Paste

Ejecución rápida!

Range(“E1″).Copy Range(“D10”)

c. Evitar loops FOR EACH

Tener que ir celda por celda consume mucho tiempo

Se puede resolver el problema de forma más directa!

Ejecución leeenta…

For Each cell In Range(“A1:A10000″)

If cell = Empty Then cell = 0

Next cell

• Los loops siempre son leeentos

* En este caso recorre

...

Descargar como (para miembros actualizados) txt (5 Kb)
Leer 2 páginas más »
Disponible sólo en Clubensayos.com