Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

VBA EXCEL | Quando as Atualizações Demoram - Por que usar VBA para Medir o Tempo de Cálculo por Aba

EXCEL | Quando as Atualizações Demoram - Por que usar VBA para Medir o Tempo de Cálculo por Aba#ProgramaçãoGlobal #SQLAnalytics #ValoresNulos #QualidadeDados #AuditoriaDados #DataScience #IntegridadeDados #ValidaçãoDados #BusinessIntelligence #DadosFaltantes #AnáliseExploratória #DetecçãoAnomalias #ConformidadeDados #CiênciaDados #MetodologiaAnalítica #AnáliseDiagnóstica #IntegridadeInformação #ProfissionaisDados #NullValues


DOE UM CAFÉ


 Compre OS LIVROS DESTA SÉRIE 



Ao trabalhar com pastas de trabalho grandes e complexas, muitos profissionais percebem que o Excel “trava” ou demora para responder, mas não sabem onde reside o gargalo. O uso de VBA para medir o tempo de cálculo por aba permite transformar um problema subjetivo (“a planilha está lenta”) em um diagnóstico objetivo (“a aba XYZ consome 80% do tempo de atualização”). Isso muda completamente a forma como se analisa desempenho em ambientes corporativos, onde decisões baseadas em dados passam a substituir palpites.



Sub TesteTempoCalculoPorAba()

' Subrotina: TesteTempoCalculoPorAba
' Objetivo: Medir o tempo de cálculo de cada aba da pasta de trabalho,
' identificando quais abas consomem mais tempo (inclusive por
' links internos/externos, fórmulas pesadas etc.).
' Uso: Execute a macro e observe o resultado no Painel Imediato (Ctrl+G).
'

Dim ws As Worksheet ' Variável que representará cada aba da pasta
Dim tempoInicio As Double ' Marca o instante de início do cálculo da aba
Dim tempoTotal As Double ' Armazena o tempo total de cálculo da aba (em segundos)
Dim resultado As Collection ' Coleção para armazenar resultados por aba (opcional)
Dim item As Variant ' Iterador para percorrer a coleção de resultados

' Inicializa a coleção de resultados (organiza dados por aba)
Set resultado = New Collection

' Desativa atualizações de tela para melhorar desempenho da medição
Application.ScreenUpdating = False

' Define o modo de cálculo manual para evitar recalculos automáticos
' durante a execução e focar apenas na execução de Application.Calculate
Application.Calculation = xlManual

' Inicia o loop por todas as planilhas da pasta de trabalho
For Each ws In ThisWorkbook.Worksheets

' Ativa a aba atual para garantir que o cálculo reflita o contexto da aba
' (alguns recursos como gráficos podem ser sensíveis à aba ativa)
ws.Activate

' Registra o momento de início do cálculo
tempoInicio = Timer()

' Força o cálculo de toda a pasta de trabalho
' (se quiser calcular apenas a aba atual, use ws.Calculate)
Application.Calculate

' Calcula o tempo consumido apenas para esta aba
tempoTotal = Timer() - tempoInicio

' Exibe o resultado no Painel Imediato (Ctrl+G)
Debug.Print "Aba: " & ws.Name & " - Tempo de cálculo: " & _
Round(tempoTotal, 4) & " segundos"

' Opcional: armazena resultado em uma coleção para uso posterior
' (ex.: gerar relatório em uma planilha)
resultado.Add Array(ws.Name, tempoTotal)

Next ws

' Opcional: exibir resumo em caixa de mensagem ao final
Dim tempoTotalMacro As Double
tempoTotalMacro = Timer() - tempoInicio

MsgBox "Medição concluída!" & vbCrLf & _
"Acesse o Painel Imediato (Ctrl+G) para ver o tempo de cada aba." & vbCrLf & _
"Tempo total aproximado da macro: " & Round(tempoTotalMacro, 4) & " segundos", _
vbInformation, "Medição de Tempo de Cálculo"

' Restaura o modo de cálculo automático
Application.Calculation = xlAutomatic

' Habilita novamente a atualização de tela
Application.ScreenUpdating = True

' Limpa variáveis de objeto
Set resultado = Nothing
End Sub


O código apresentado força o modo de cálculo manual (Application.Calculation = xlManual) e utiliza a função Timer() para registrar o momento antes e depois do cálculo de cada aba. Ao iterar com For Each ws In ThisWorkbook.Worksheets, temos a capacidade de isolar o impacto de cada planilha, incluindo fórmulas, tabelas dinâmicas e links internos/externos, na performance geral. Esse método é simples, mas extremamente eficaz, pois permite rastrear o tempo consumido por aba sem necessidade de ferramentas externas.


Além da medição bruta do tempo, o uso de Debug.Print para exibir o nome da aba e o tempo de cálculo em segundos cria um registro auditável dentro do próprio ambiente do Excel. Esse tipo de logging é essencial em ambientes corporativos, onde é necessário justificar decisões de refatoração, como a remoção de fórmulas pesadas ou a migração de links externos para Power Query. Ao identificar com precisão qual aba está sobrecarregando o cálculo, a equipe pode priorizar esforços e evitar retrabalho em áreas que não são críticas.


DESTAQUE!
TODOS OS ARTIGOS ATÉ DEZEMBRO 25


Outra vantagem desse código é a sua flexibilidade. Com pequenas alterações, é possível adaptá‑lo para usar ws.Calculate em vez de Application.Calculate, focando apenas na aba atual, ou até mesmo gravar os resultados diretamente em uma planilha de resumo. Essa adaptabilidade torna o código uma base ideal para diagnósticos mais complexos, como monitoramento de performance em múltiplas pastas de trabalho ou integração com relatórios automáticos de saúde do modelo. Em ambientes onde o Excel é usado como plataforma de BI simples, essa capacidade de automação é inestimável.


Do ponto de vista de boas práticas, o código também demonstra técnicas importantes de otimização de macros, como desativar a atualização de tela (Application.ScreenUpdating = False) e restaurar o estado de cálculo após a execução. Esses ajustes garantem que o próprio processo de medição não interferisse nos resultados, ao mesmo tempo em que evitam travamentos visuais durante a execução. Essas práticas são fundamentais para qualquer VBA que interaja com grandes volumes de dados ou processos intensivos.


Em resumo, o uso desse código VBA para medir o tempo de cálculo por aba não é apenas sobre “fazer a macro girar mais rápido”. É sobre transformar visibilidade em controle: identificar o gargalo, justificar mudanças técnicas e propor soluções sustentáveis. Em um blog dedicado exclusivamente a VBA, esse tipo de abordagem é central, pois mostra como a automação pode ser usada não apenas para executar tarefas, mas para otimizar e profissionalizar o uso do Excel dentro de grandes organizações.


Agora adapte o código abaixo para gravar o resultado direto em uma nova aba de resumo chamada Status em DDD-MM-AAAA, a qual deve ser acrescentada a cada atualização (por exemplo, coluna A = nome da aba, coluna B = tempo de cálculo).


👉 Siga André Bernardes no LinkedinClique aqui e contate-me via What's App.

Comente e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com


 

 Compre OS LIVROS DESTA SÉRIE 


 Série Donut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


eBook - PT - Série DONUT PROJECT - Volume 07 - VBA TOP 50 Códigos Mais Importantes - Access — André Luiz BernardeseBook - PT - Série DONUT PROJECT - Volume 07 - VBA TOP 50 Códigos Mais Importantes - Excel — André Luiz Bernardes eBook - PT - Série DONUT PROJECT - Volume 07 - VBA TOP 50 Códigos Mais Importantes - Outlook — André Luiz Bernardes 

eBook - PT - Série DONUT PROJECT - Volume 08 - VBA TOP 50 Códigos Mais Importantes - Project — André Luiz Bernardes  eBook - PT - Série DONUT PROJECT - Volume 08 - VBA TOP 50 Códigos Mais Importantes - Project — André Luiz Bernardes  eBook - PT - Série DONUT PROJECT - Volume 08 - VBA TOP 50 Códigos Mais Importantes - Word — André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias