Excel VBA: Tela Piscando Durante Macro – Como Usar ScreenUpdating Corretamente
🔍 WiseChecker

Excel VBA: Tela Piscando Durante Macro – Como Usar ScreenUpdating Corretamente

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.

  1. Abra o Editor Visual Basic
    Pressione Alt + F11 no teclado para abrir o ambiente de desenvolvimento VBA.
  2. Insira o comando ScreenUpdating
    No início do procedimento da macro, antes de qualquer outro código, digite Application.ScreenUpdating = False em sua própria linha.
  3. 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.
  4. Religue a atualização da tela
    No final da macro, logo antes da instrução End Sub, digite Application.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.

  1. Configure o manipulador de erros
    Após a linha Application.ScreenUpdating = False, adicione On Error GoTo ErrorHandler.
  2. Rotule o final do código principal
    Após o código principal e antes da linha Application.ScreenUpdating = True, adicione Exit Sub em sua própria linha.
  3. Crie o rótulo do manipulador de erros
    Abaixo da linha Exit Sub, adicione uma nova linha com o rótulo ErrorHandler:.
  4. Adicione o comando de redefinição no manipulador
    Na linha após o rótulo, digite Application.ScreenUpdating = True. Em seguida, adicione MsgBox "Ocorreu um erro: " & Err.Description para 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.