Sua tela do Excel pisca ou vibra rapidamente quando uma macro VBA é executada. Essa distração visual faz a macro parecer lenta e amadora. A causa é o Excel redesenhar a tela após cada alteração feita pelo código. Este artigo explica como usar a propriedade ScreenUpdating para eliminar o flickering e acelerar suas macros.
Principais conclusões: Pare o flickering da tela no VBA
- Application.ScreenUpdating = False: Desliga a atualização da tela no início da macro para evitar flickering e melhorar o desempenho.
- Application.ScreenUpdating = True: Reativa a atualização da tela ao final da macro para mostrar o resultado final e restaurar a interação normal com o Excel.
- Tratamento de erros com ScreenUpdating: Garante que a atualização da tela seja sempre reativada, mesmo que a macro encontre um erro em tempo de execução e pare.
Por que as macros VBA causam flickering na tela
O Excel foi projetado para mostrar cada alteração conforme ela acontece. Quando seu código VBA é executado, ele pode modificar células, formatar intervalos ou inserir gráficos. Por padrão, o Excel tenta exibir cada uma dessas ações imediatamente. Isso faz com que o aplicativo atualize constantemente a janela, resultando em um efeito de piscar ou vibração.
A propriedade ScreenUpdating controla esse comportamento. Quando definida como True, o Excel atualiza a tela. Quando definida como False, o Excel pausa todas as atualizações visuais. Isso permite que seu código seja executado em segundo plano. A tela permanece estática até que você reative a atualização. Isso não apenas interrompe o flickering, mas também faz sua macro rodar mais rápido, pois o Excel não perde tempo desenhando.
Quando desligar o ScreenUpdating
Use ScreenUpdating = False para qualquer macro que realize múltiplas operações. Isso inclui loops que processam muitas linhas, código que aplica formatação a grandes áreas ou scripts que movem dados entre planilhas. Para macros muito curtas que alteram apenas uma célula, o benefício é mínimo. O objetivo principal é agrupar as alterações visuais.
Passos para implementar ScreenUpdating em suas macros
O método correto envolve desligar a propriedade, executar seu código principal e depois religá-la. Você também deve incluir tratamento de erros para evitar que a propriedade fique no estado desligado.
- Abra o Editor Visual Basic
Pressione Alt + F11 no teclado para abrir o ambiente de desenvolvimento VBA. - Insira o comando ScreenUpdating
No início do procedimento da macro, antes de qualquer outro código, digiteApplication.ScreenUpdating = Falseem sua própria linha. - Adicione o código principal da macro
Escreva ou cole o código que realiza suas tarefas, como copiar dados ou formatar células, abaixo da linha do ScreenUpdating. - Religue a atualização da tela
No final da macro, logo antes da instruçãoEnd Sub, digiteApplication.ScreenUpdating = True.
Adicionando tratamento básico de erros
Para tornar sua macro robusta, use um manipulador de erros simples. Isso garante que ScreenUpdating seja sempre definido como True, mesmo se o código falhar.
- Configure o manipulador de erros
Após a linhaApplication.ScreenUpdating = False, adicioneOn Error GoTo ErrorHandler. - Rotule o final do código principal
Após o código principal e antes da linhaApplication.ScreenUpdating = True, adicioneExit Subem sua própria linha. - Crie o rótulo do manipulador de erros
Abaixo da linhaExit Sub, adicione uma nova linha com o rótuloErrorHandler:. - Adicione o comando de redefinição no manipulador
Na linha após o rótulo, digiteApplication.ScreenUpdating = True. Em seguida, adicioneMsgBox "Ocorreu um erro: " & Err.Descriptionpara alertar o usuário.
Erros comuns e limitações do ScreenUpdating
A macro trava e deixa o ScreenUpdating desligado
Se sua macro encontrar um erro e parar sem reativar o ScreenUpdating, o Excel parecerá congelado. Você não verá nenhuma alteração feita manualmente. Para corrigir isso, execute uma macro simples de uma linha na Janela Imediata. Pressione Ctrl + G no Editor VBA, digite Application.ScreenUpdating = True e pressione Enter.
A tela não atualiza após a execução da macro
Isso acontece se você esquecer de definir ScreenUpdating = True no final da macro. Verifique novamente os pontos de saída do seu código. Cada caminho possível através da macro, incluindo saídas antecipadas dentro de instruções If, deve levar ao comando que reativa a atualização. Usar a estrutura de tratamento de erros acima evita isso.
Flickering persiste em controles de UserForm
A propriedade Application.ScreenUpdating não controla a repintura de controles de UserForm como ListBoxes ou MultiPages. Para esses, você pode precisar usar os métodos UserForm.Hide e UserForm.Show ou controlar propriedades específicas como ListBox.Clear em lote para minimizar as atualizações visuais.
ScreenUpdating vs outros métodos de desempenho
| Item | Application.ScreenUpdating | Application.Calculation | Application.EnableEvents |
|---|---|---|---|
| Propósito principal | Controla as atualizações visuais da tela | Controla quando as fórmulas recalculam | Impede que procedimentos de evento sejam executados |
| Configuração típica | Definir como False no início da macro | Definir como xlCalculationManual | Definir como False no início da macro |
| Ganho de desempenho | Elimina flickering, acelera operações de exibição | Acelera macros que escrevem em muitas células com fórmulas | Acelera macros que disparam eventos Worksheet_Change |
| Risco se deixado desligado | Excel parece congelado, sem atualizações visuais | Fórmulas mostram resultados desatualizados e incorretos | Macros ou recursos que dependem de eventos não funcionarão |
| Comando de redefinição | Application.ScreenUpdating = True | Application.Calculation = xlCalculationAutomatic | Application.EnableEvents = True |
Agora você pode escrever macros VBA que rodam sem o incômodo flickering da tela. Comece adicionando Application.ScreenUpdating = False ao seu próximo módulo de código. Para melhorias adicionais de velocidade, combine com Application.Calculation = xlCalculationManual. Lembre-se de sempre usar um manipulador de erros para redefinir a propriedade ScreenUpdating para True, garantindo que o Excel permaneça utilizável mesmo após um erro na macro.