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:
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:
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:
- Dimensionar:
- As variáveis “i”, “ultLin” e “cont” como números do tipo Long
- Armazenar na variável “ultLin” o número da linha da última célula preenchida da coluna A
- Invocar a função abrirBarraProgresso
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:
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!
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.