Blog

Postado em em 19 de novembro de 2022

Barra de Progresso no Excel para Monitorar seus Códigos em VBA

Você sabia que é possível criar uma barra de progresso no Excel para monitorar seus códigos em VBA enquanto estão rodando?

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala, Impressionadores! Hoje vamos te mostrar como criar uma barra de progresso no Excel!

Com ela você vai conseguir ver o progresso do seu código dentro do Excel enquanto ele está funcionando.

E aí, prontos para ver como fazer para monitorar seus códigos enquanto eles estão sendo executados?

No arquivo disponibilizado para a aula de hoje, temos dados numa tabela de atendimentos de uma empresa.

Registros feitos são o ID do atendimento, sua data, qual o código do cliente, total de tempo gasto, e o atendente da empresa. Veja abaixo a tabela com algumas das informações:

Macros no VBA
Macros no VBA

Vamos utilizar um formulário em VBA personalizado, que vai simular simplesmente a barra de progresso para VBA.

Criados os objetos que vão compor o formulário, e feitas as devidas personalizações visuais, teremos o seguinte cenário:

Barra de progresso VBA
Barra de progresso VBA

Agora partiremos para o código que será responsável por configurar e programar de fato a nossa barra de progresso para monitorar códigos.

Ela será composta de uma sub principal com a estrutura de cálculo, e de 3 funções auxiliares: uma para invocar a abertura, outra para fazer os cálculos e configurar a barra, e outra para fechar o formulário.

A seguir temos os códigos, e os comentários:

Sub excluirLinhas()

Dim i As Long, ultLin As Long, cont As Long

ultLin = Range("A1048576").End(xlUp).Row

abrirBarraProgresso

cont = 1

For i = 2 To ultLin
   If Cells(i, 1).Value = "" Then Exit For

   Rows(i).Delete shift:=xlUp   

    progredirBarraProgresso (cont / (ultLin - 1))

    DoEvents

   cont = cont + 1

    i = i - 1

Next

fecharBarraProgresso 

End Sub

 Comentários a respeito da sub excluirLinhas:

Function abrirBarraProgresso()

BarraDeProgresso.quadroProgresso.Width = 0
BarraDeProgresso.Show (vbModeless)

End Function
  • Fazer a largura (width, em inglês) do quadroProgresso (nosso objeto que de fato representa a barra de progresso) ser igual a 0. Nesse momento a barra está programada para estar vazia
  • Mostrar o formulário BarraDeProgresso (Formulário inteiro)
  • Em seguida (voltando para a sub), armazenar o número 1 no contador “cont”
  • Usar uma estrutura de repetição For, que vai executar as seguintes ações repetidas enquanto a variável “i” assumir valores entre 2 e o valor representado pela “ultLin”:
    • Aplicar uma comparação através de uma estrutura If, para verificar se a célula da primeira coluna estiver vazia. Se estiver, abortar a estrutura de repetição
    • Deletar a linha inteira representada pela variável “i”, se a célula da primeira coluna (a cada linha) não estiver vazia (está preenchida)
    • Invocar a função progredirBarraProgresso, passando para ela a divisão das seguintes variáveis: “cont” e “ultLin”-1, que será de fato o “andamento” do código
Function progredirBarraProgresso(andamento As Double)

widthTotal = 216
widthAtual = widthTotal * andamento

BarraDeProgresso.quadroProgresso.Width = widthAtual
BarraDeProgresso.textoAndamento.Caption = Round(andamento * 100, 0) & "% Completo"

End Function
  • Armazenar na variável “widthTotal” o valor 216 (tamanho máximo da barra)
  • Armazenar na variável “widthAtual” o resultante da multiplicação do “andamento” (que é a razão entre “cont” e “ultLin”-1) e o widthTotal (216)
  • Passar para a propriedade de largura do quadroProgresso, do formulário BarraDeProgresso o que estiver na variável “widthAtual”. Aqui será de fato da barra estará preenchida, de seu total
  • Passar para a propriedade de texto do textoAndamento (label que vai representar o título do nosso formulário), do formulário BarraDeProgresso o que for resultante do arredondamento do “andamento” para porcentagem. Aqui será de fato escrito o quanto da barra estará preenchido, de 100% (para acompanhar o tamanho da barra preenchida.
  • Voltando à sub, “mandaremos” o Excel deixar vermos os eventos acontecerem normalmente na planilha. Dessa forma, conseguiremos ver a barra “andando” e as coisas acontecendo. Caso contrário, não veríamos nem a barra andando, nem o processo acontecer
  • Adicionar 1 unidade na nossa variável contadora “cont”
  • Diminuir 1 unidade na nossa variável “i”, porque excluímos uma linha. Exemplo:
    • Temos duas linas, uma linha imediatamente abaixo (exemplo: 3) da linha a ser excluída (exemplo: 2)
    • Inicialmente elas são as linhas 2 e 3
    • Se eu excluir a linha 2, a linha 3 se torna linha 2
    • Então, se não fizermos essa diminuição de 1 unidade, a linha 2 ficaria sem ser analisada, porque a variável “i” assumiria 3, e essa “nova” linha 2 ficaria “de fora” da análise
  • Fazer essas ações para todas as linhas da tabela
  • Invocar a função fecharBarraProgresso, que vai simplesmente descarregar o formulário BarraDeProgresso
Function fecharBarraProgresso()

Unload BarraDeProgresso

End Function

Assim, se encerra a nossa sub de como monitorar códigos em VBA.

A seguir, mostramos diversos momentos de funcionamento desse código que simula uma barra de progresso em VBA. Veja:

Barra de progresso Excel
Barra de progresso Excel

Conclusão – Barra de Progresso no Excel

Hoje você aprendeu como criar barra de progresso no Excel!

Ela é constituída por um formulário em VBA, algumas estruturas famosas como a estrutura de repetição for e a estrutura condicional if, além de diversos conceitos legais de VBA.

Valeu, pessoal! Fique ligado no nosso canal do Youtube para mais conteúdo de VBA!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer receber um minicurso 100% gratuito de Excel? Preencha seu e-mail abaixo!