Atualização de tela do VBA - Acelerando o processo de execução do código

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 finalize sua tarefa atribuída. À medida que nossa tela pisca ou atualiza, isso torna o programa Excel mais 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 enquanto o código está em execução.

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?

Suponha que você tenha alguma dúvida sobre quando usar essa 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?

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

Por exemplo, observe 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 até a 50ª coluna e, novamente, volta e insere o número de série começando de 51 da segunda linha até a 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 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 o sinal de igual (=).

Como podemos ver, dois valores booleanos, ou seja, FALSE & TRUE.

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

Agora, quando a macro começa 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 defina a atualização de tela para TRUE no final

Tenho visto muitas pessoas definirem a atualização da tela para FALSE, mas esqueci de defini-la de volta para 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). (RowCount, ColumnCount) .Value = MyNumber Próximo ColumnCount Próximo RowCount Application.ScreenUpdating = True End Sub

Artigos interessantes...