Siempre que actualiza un valor de celda, Excel pasa por un proceso para volver a calcular el libro. Cuando trabaja directamente en Excel, desea que esto suceda el 99,9% del tiempo (la excepción es si está trabajando con un libro de trabajo extremadamente grande). Sin embargo, esto realmente puede ralentizar su código VBA. Es una buena práctica configurar los cálculos en manual al comienzo de las macros y restaurar los cálculos al final de las macros. Si necesita volver a calcular el libro de trabajo, puede decirle manualmente a Excel que lo calcule.
Desactivar cálculos automáticos
Puede desactivar el cálculo automático con una macro configurándolo en xlmanual. Utilice la siguiente pieza de código VBA:
1 | Application.Calculation = xlManual |
Volver a activar los cálculos automáticos
Para volver a activar el cálculo automático con la configuración xlAutomatic:
1 | Application.Calculation = xlAutomatic |
Recomiendo deshabilitar los cálculos automáticos al principio de su procedimiento y volver a habilitar los cálculos automáticos al final. Se verá así:
Deshabilitar el ejemplo de macro de cálculos automáticos
12345678 | Sub Auto_Calcs_Example ()Application.Calculation = xlManual'Hacer algoApplication.Calculation = xlAutomaticEnd Sub |
Cálculo manual
Cuando los cálculos automáticos están deshabilitados, puede usar el Calcular comando para forzar a Excel a recalcular:
1 | Calcular |
También puede decirle a Excel que vuelva a calcular solo una hoja de trabajo individual:
1 | Hojas de trabajo ("hoja1"). Calcular |
También puede decirle a VBA que vuelva a calcular solo un rango (haga clic para leer nuestro artículo sobre los métodos de cálculo de VBA)
Así es como podría verse esto dentro de una macro:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual'Hacer algo'RecalcCalcular'Haz más cosasApplication.Calculation = xlAutomaticEnd Sub |
Configuración de VBA - Código de aceleración
Si su objetivo es acelerar su código, también debería considerar ajustar estas otras configuraciones:
Desactivar la actualización de pantalla puede marcar una gran diferencia en la velocidad:
1 | Application.ScreenUpdating = Falso |
Apagar la barra de estado también marcará una pequeña diferencia:
1 | Application.DisplayStatusBar = False |
Si su libro de trabajo contiene eventos, también debe desactivar los eventos al comienzo de sus procedimientos (¡para acelerar el código y evitar bucles interminables!):
1 | Application.EnableEvents = False |
Por último, su código VBA puede ralentizarse cuando Excel intenta volver a calcular los saltos de página (Nota: no todos los procedimientos se verán afectados). Para desactivar DisplayPageBreaks, use esta línea de código:
1 | ActiveSheet.DisplayPageBreaks = Falso |