VBA - Deixando mais rápido !

Uma dica simples para quem começou a escrever códigos para automatizar planilhas em Excel.
As vezes você desenvolve um super projeto, mas ele demora para executar.

As dicas abaixo podem ajudar;

ScreenUpdating

As vezes é bonito ver tudo que a macro esta fazendo na tela, mudando de guia, abrindo e fechando planilha, fazendo cálculos...efim.

Mas isto deixa tudo mais lento. Neste caso deixe a tela congelada;

Application.ScreenUpdating = False


Cálculos

Por padrão o cálculo automático fica habilitado. Sendo assim quanto uma macro é executada e tem um campo calculado o excel vai calcular enquanto a macro está executando.

Para evitar este problema, coloque no início do código;
Application.Calculation = xlCalculationManual

Antes de terminar, não esqueça de Ativar.
Mesmo que a planilha demore para calcular, ela fará tudo de uma vez. Ainda assim o ganho é perceptível.

Application.Calculation = xlCalculationAutomatic

Aviso de Alerta

Entre abrir, salvar uma planilha, alguns alertas aparecem. Para evitar a perda de tempo para fechar o popup, utilize este código;

Application.DisplayAlerts = False

Ao terminar, não esqueça de ativar.

Application.DisplayAlerts = True

Status Bar

Bom, você desativou tudo. Agora você deve estar de perguntando. Tá agora onde a macro está? Travou ou tá executando? vai demorar muito?

O código abaixo, pode ser utilizado para apontar por exemplo, onde a macro está bem como dentro de um laço ( LOOP ) apontar qual linha está.

Pelos meus testes, este comando entra mais como auxílio e não vai deixar sua macro mais lenta, fique tranquilo.

Contando linhas dentro de um Loop ( Do While , Until , For )

Na maioria dos casos, o loop congela também.... para evitar este problema, coloque DoEvents no final do laço.


Exemplo:

For x = 1 To 100

Application.StatusBar = x
' o valor de x é sua variável.

DoEvents

Next X

Você também pode apontar um nome direto caso não tenha laço;

Exemplo:
Application.StatusBar = "A macro está calculando os valores"


Assim que terminar, desative a StatusBar

Application.StatusBar = False



Ok ! é isso, façam os testes.