VBA Calculate – Agora, Pasta de Trabalho, Planilha ou Intervalo
In this Article
Este tutorial ensinará a você todas as diferentes opções de cálculo no VBA.
Por padrão, o Excel calcula todas as pastas de trabalho abertas sempre que é feita uma alteração na pasta de trabalho. Ele faz isso seguindo uma árvore de cálculo em que, se a célula A1 for alterada, ele atualiza todas as células que dependem da célula A1 e assim por diante. No entanto, isso pode fazer com que seu código VBA seja executado de forma extremamente lenta, pois toda vez que uma célula é alterada, o Excel precisa recalcular.
Para aumentar a velocidade do VBA, você geralmente deseja desativar os cálculos automáticos no início dos procedimentos:
Application.Calculation = xlManual
e reativá-los no final:
Application.Calculation = xlAutomatic
No entanto, e se você quiser calcular todas as pastas de trabalho (ou parte delas) em seu procedimento? O restante deste tutorial lhe ensinará o que fazer.
Calcular Agora
Você pode usar o comando Calcular para recalcular tudo (em todas as pastas de trabalho abertas):
Calculate
Geralmente, esse é o melhor método a ser usado. Entretanto, você também pode executar cálculos mais restritos para aumentar a velocidade.
Calcular Somente a Planilha
Você também pode instruir o VBA a calcular apenas uma planilha específica.
Esse código recalculará a planilha ativa:
ActiveSheet.Calculate
Este código recalculará a Planilha1:
Sheets("Planilha1").Calculate
Calcular Intervalo
Se precisar de um cálculo mais restrito, você pode dizer ao VBA para calcular apenas um intervalo de células:
Sheets("Planilha1").Range("a1:a10").Calculate
Calcular Fórmula Individual
Esse código calculará apenas uma fórmula de célula individual:
Range("a1").Calculate
Calcular Pasta de trabalho
Não existe uma opção VBA para calcular apenas uma pasta de trabalho inteira. Se você precisar calcular uma pasta de trabalho inteira, a melhor opção é usar o comando Calculate (Calcular):
Calculate
Isso calculará todas as pastas de trabalho abertas. Se estiver realmente preocupado com a velocidade e quiser calcular uma pasta de trabalho inteira, talvez seja possível ser mais seletivo quanto às pastas de trabalho que estão abertas ao mesmo tempo.
Calcular Pasta de Trabalho – Métodos que Não Funcionam
Há alguns métodos que você pode se sentir tentado a usar para forçar o VBA a calcular apenas uma pasta de trabalho, mas nenhum deles funcionará corretamente.
Esse código percorrerá cada planilha da pasta de trabalho e recalculará as planilhas uma de cada vez:
Sub Recalcular_Pasta()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Calculate
Next ws
End Sub
Esse código funcionará bem se todas as planilhas forem “independentes”, ou seja, se nenhuma delas contiver cálculos que se refiram a outras planilhas.
Entretanto, se as planilhas fizerem referência a outras planilhas, os cálculos poderão não ser atualizados corretamente. Por exemplo, se você calcular a Planilha1 antes da Planilha2, mas as fórmulas da Planilha1 dependerem de cálculos feitos na Planilha2, suas fórmulas não conterão os valores mais atualizados.
Você também pode tentar selecionar todas as planilhas de uma vez e calcular a planilha ativa:
ThisWorkbook.Sheets.Select
ActiveSheet.Calculate
No entanto, isso causará o mesmo problema.