Sempre que você atualiza um valor de célula, o Excel passa por um processo para recalcular a pasta de trabalho. Ao trabalhar diretamente no Excel, você deseja que isso aconteça 99,9% do tempo (a exceção é se você estiver trabalhando com uma pasta de trabalho extremamente grande). No entanto, isso pode realmente desacelerar seu código VBA. É uma boa prática definir seus cálculos como manuais no início das macros e restaurar os cálculos no final das macros. Se precisar recalcular a pasta de trabalho, você pode dizer manualmente ao Excel para calcular.
Desligue os cálculos automáticos
Você pode desativar o cálculo automático com uma macro, definindo-o como xlmanual. Use a seguinte parte do código VBA:
1 | Application.Calculation = xlManual |
Ativar novamente os cálculos automáticos
Para reativar o cálculo automático com a configuração xlAutomatic:
1 | Application.Calculation = xlAutomatic |
Eu recomendo desativar os cálculos automáticos no início de seu procedimento e reativar os cálculos automáticos no final. Isso parecerá assim:
Desativar exemplo de macro de cálculos automáticos
12345678 | Sub Auto_Calcs_Example ()Application.Calculation = xlManual'Faça alguma coisaApplication.Calculation = xlAutomaticEnd Sub |
Cálculo Manual
Quando os cálculos automáticos estão desativados, você pode usar o Calcular comando para forçar o Excel a recalcular:
1 | Calcular |
Você também pode dizer ao Excel para recalcular apenas uma planilha individual:
1 | Planilhas ("planilha1"). Calcule |
Você também pode dizer ao VBA para recalcular apenas um intervalo (clique para ler nosso artigo sobre os métodos de cálculo do VBA)
Veja como isso pode ficar dentro de uma macro:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual'Faça alguma coisa'RecalcCalcular'Faça mais coisasApplication.Calculation = xlAutomaticEnd Sub |
Configurações de VBA - Código de aceleração
Se sua meta é acelerar seu código, você também deve considerar ajustar estas outras configurações:
Desativar a atualização de tela pode fazer uma grande diferença na velocidade:
1 | Application.ScreenUpdating = False |
Desligar a barra de status também fará uma pequena diferença:
1 | Application.DisplayStatusBar = False |
Se sua pasta de trabalho contém eventos, você também deve desabilitar eventos no início de seus procedimentos (para acelerar o código e evitar loops infinitos!):
1 | Application.EnableEvents = False |
Por último, seu código VBA pode ficar lento quando o Excel tenta recalcular quebras de página (Observação: nem todos os procedimentos serão afetados). Para desativar DisplayPageBreaks, use esta linha de código:
1 | ActiveSheet.DisplayPageBreaks = False |