Propriedade de atualização de tela VBA

Atualização de tela do Excel VBA

VBA Screen Updating é uma propriedade usada para evitar ou prevenir flashes de distração durante a execução do código e torná-lo mais rápido desativando a atualização de tela. Podemos desligar a atualização da tela definindo esta propriedade como falsa.

Muitas vezes podemos sentir que a tela do Excel enlouquece enquanto a macro está em execução e quase ficamos frustrados com isso. Mas como lidamos com essas situações e fazemos o código rodar mais rápido do que o normal?

A atualização de tela é algo que podemos notar enquanto a macro do Excel está em execução. Quando a tarefa está em execução podemos notar que nossa tela está atualizando os valores até que a macro termine sua tarefa atribuída. À medida que nossa tela pisca ou atualiza, o programa do Excel fica lento e leva mais tempo do que o normal para concluir a tarefa.

No VBA temos uma propriedade chamada “ScreenUpdating” e definimos essa propriedade como FALSE para que elimine o processo de atualização da tela durante a execução do código.

Neste artigo, vamos dizer adeus à observação do drama de ação na tela enquanto o código está sendo executado. Hoje você fará seu código rodar cada vez mais rápido do que o normal.

Quando usar o recurso de atualização de tela?

Se você tiver alguma dúvida sobre quando usar esta técnica. Olhe para os pontos abaixo.

  • Quando você está percorrendo um grande número de células.
  • Enviando emails do Excel VBA.
  • Alternando entre pastas de trabalho do Excel.
  • Abrindo novas pastas de trabalho.

Como usar o recurso de atualização de tela no código VBA?

Você pode baixar este modelo do Excel de atualização de tela VBA aqui - Modelo de atualização de tela VBA do Excel

Exemplo # 1 - Desative a atualização de tela

Para obter um exemplo, veja o código abaixo.

Código:

 Sub Screen_Updating () Dim RowCount como longo Dim ColumnCount As Long Dim MyNumber As Long MyNumber = 0 For RowCount = 1 a 50 Para ColumnCount = 1 a 50 MyNumber = MyNumber + 1 Cells (RowCount, ColumnCount) .Selecionar células (RowCount, ColumnCount) .Value = MyNumber Próximo ColumnCount Próximo RowCount End Sub 

O acima tem um loop VBA aninhado para inserir números de série da primeira coluna à 50ª coluna e novamente volta e insere o número de série começando de 51 da segunda linha à 50ª coluna.

Assim, ele irá inserir até atingir a 50ª linha.

Enquanto este código está sendo executado, você pode notar sua tela piscando e você não pode fazer nada além de assistir a este momento louco.

Para evitar tudo isso, podemos adicionar a atualização de tela a FALSE.

Para acessar o recurso de Atualização de Tela, primeiro precisamos acessar o objeto Aplicativo.

Como podemos ver com o objeto Application, temos muitas propriedades e métodos. Portanto, selecione Atualização de tela na lista do IntelliSense.

Nota: Você deve aplicar o recurso Atualização de Tela imediatamente após a declaração das variáveis.

Após selecionar a propriedade Screen Updating coloque um sinal de igual (=).

Como podemos ver dois valores booleanos, isto é, FALSE & TRUE.

Para interromper a atualização da tela, defina o status para FALSE.

Agora, quando a macro começar a ser executada primeiro, ela atualizará o status de atualização da tela para FALSE e continuará para a próxima linha.

Como a macro executou a atualização da tela para FALSE, ela não permitirá que a tela seja atualizada enquanto o código estiver executando sua tarefa.

Exemplo # 2 -

Sempre definir atualização de tela para TRUE no final

Já vi muitas pessoas definirem a atualização da tela como FALSE, mas esqueci de defini-la novamente como TRUE no final da macro.

Sempre defina a atualização da tela de volta para TRUE no final da macro.

Código:

 Sub Screen_Updating () Dim RowCount As Long Dim ColumnCount As Long Dim MyNumber As Long Application.ScreenUpdating = False MyNumber = 0 For RowCount = 1 To 50 For ColumnCount = 1 To 50 MyNumber = MyNumber + 1 Cells (RowCount, ColumnCount) .Selecionar células (RowCount, ColumnCount) .Value = MyNumber Próximo ColumnCount Próximo RowCount Application.ScreenUpdating = True End Sub