Blog

Postado em em 29 de janeiro de 2021

ProgressBar no VBA – Criando uma Barra de Progresso

Nesta aula vamos te mostrar o ProgressBar no VBA, que te permite criar uma barra de progresso para visualizar o andamento do código em VBA!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso Canal do YouTube para mais vídeos!

Para receber a planilha que usamos na aula no seu e-mail, preencha:

Como construir uma barra de progresso no VBA?

Na aula de hoje vamos aprender como criar barra de progresso no VBA, que é uma forma de verificar o andamento ou o percentual de conclusão de um código criado.

Você consegue visualmente entender em que momento está, e se vai demorar ou não, apenas olhando para a barra de progresso. Resumindo, ela te permite como verificar progresso do VBA em si, a duração dos seus códigos.

Para criá-la, precisaremos:

  • Ativar a guia desenvolvedor, conforme mostrado no vídeo
  • Ir na guia Desenvolvedor
  • Clicar em Inserir > Controles ActiveX > Clicar na última opção (Mais controles)
  • Escolher a opção de “Microsoft ProgressBar Control, version 6.0”
  • Clicar em OK
  • Clicar com o botão esquerdo do mouse e arrastar para criar e redimensionar a barra criada

Em seguida, iremos mudar algumas propriedades da barra criada, para que ela fique da forma que queremos. Observe as mudanças feitas no vídeo:

  • Clicar com botão direito na ProgressBar VBA > Propriedades
  • Name: barra_progresso
  • Scrolling: 1 – ccScrollingSmooth
  • Appearence: 0 – ccFlat
  • BorderStyle: 1 – ccFixedSingle

Abaixo está o código necessário para realizar o carregamento da nossa ProgressBar. A parte necessária para que ela funcione será devidamente explicada a seguir, e o código, explicada na Série de Compilação de Planilhas será somente citado.

Sub compilacao()
' Desativar atualização de tela e cálculo automático
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

' Declarar variáveis
Dim tempo_inicial As Double
Dim tempo_final As Double
Dim tempo_total As Double

Dim caminho_pasta As String
Dim pasta As Object
Dim aba_resumo As Object
Dim planilha As Object

Dim linha_vazia_resumo As Long
Dim qtd_info As Long
Dim ult_linha As Long

tempo_inicial = Timer ' Guardar momento em que a macro começou

caminho_pasta = ThisWorkbook.Path & "" ' Definir a pasta onde estão os arquivos a serem compilados
Set pasta = CreateObject("Scripting.FileSystemObject").getfolder(caminho_pasta) ' Criar um objeto para a pasta em questão
Set aba_resumo = ThisWorkbook.Sheets("Resumo") ' Dar um nome à aba principal da planilha Resumo

cont = 0

For Each arquivo In pasta.Files ' Percorrer todos os arquivos da pasta em questão

    If InStr(arquivo.Name, "Resumo") = 0 Then ' Só analisar se o nome do arquivo não contiver "Resumo"

               cont = cont + 1   

    End If

Next

ThisWorkbook.Sheets(“Resumo”).barra_progresso.Max = cont
ThisWorkbook.Sheets(“Resumo”).barra_progresso.Value = 0

For Each arquivo In pasta.Files ' Percorrer todos os arquivos da pasta em questão

linha_vazia_resumo = aba_resumo.Range("A1000000").End(xlUp).Row + 1 ' Verificar a primeira linha vazia da aba Resumo

If InStr(arquivo.Name, "Resumo") = 0 Then ' Só analisar se o nome do arquivo não contiver "Resumo"

Set planilha = Workbooks.Open(caminho_pasta & arquivo.Name) ' Abre a planilha

qtd_info = planilha.Sheets(1).Range("A1000000").End(xlUp).Row - 1 ' Armazena a quantidade de informações na planilha

If qtd_info >= 1 Then ' Só executa se tiver pelo menos uma informação

aba_resumo.Range("A" & linha_vazia_resumo & ":D" & linha_vazia_resumo + qtd_info - 1).Value = planilha.Sheets(1).Range("A2:D" & qtd_info + 1).Value ' Transfere as informações da planilha da loja para a planilha de Resumo
aba_resumo.Range("E" & linha_vazia_resumo & ":E" & linha_vazia_resumo + qtd_info - 1).Value = Replace(arquivo.Name, ".xlsx", "") ' Adiciona na planilha de Resumo uma informação dizendo de qual loja vieram essas movimentações

End If

       planilha.Close ' Fecha a planilha da loja
        ThisWorkbook.Sheets(“Resumo”).barra_progresso.Value = ThisWorkbook.Sheets(“Resumo”).barra_progresso.Value + 1

End If

Next

aba_resumo.Columns("A:E").AutoFit ' Utiliza o autoajuste nas colunas
aba_resumo.Columns("A:E").HorizontalAlignment = xlCenter ' Centraliza os textos
With aba_resumo.Sort ' Organiza do mais antigo para o mais novo

.SortFields.Clear
.SortFields.Add2 Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A:E")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With

aba_resumo.Columns("A:A").NumberFormat = "dd/mmm/yy" ' Formatar a coluna A como data
aba_resumo.Columns("D:D").NumberFormat = "$ #,##0.00" ' Formatar a coluna D como moeda
ult_linha = aba_resumo.Range("A1000000").End(xlUp).Row ' Armazena a última linha preenchida da planilha
aba_resumo.Range("A2:E" & ult_linha).Borders.LineStyle = xlContinuous ' Coloca borda em todas as células preenchidas

tempo_final = Timer ' Guarda o momento em que a macro finalizou
tempo_total = Round(tempo_final - tempo_inicial, 1) ' Guarda o tempo total gasto para rodar a macro

MsgBox ("Concluído em " & tempo_total & "s") ' Exibe uma mensagem com o tempo necessário para rodar a macro

' Reativar atualização de tela e cálculo automático
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Explicação:
  • O código vai começar sua compilação criando uma variável de contagem chamada “cont” e atribuindo valor 0 a ela.
  • Depois, iremos aplicar uma estrutura For Each VBA para que percorramos os arquivos da pasta desejada para fazer a compilação desses arquivos. A cada arquivo percorrido, então, o cont vai acrescentar uma unidade em seu valor (cont novo vai receber o valor do cont antigo + 1). Isso nos dará o valor total de arquivos que o código vai percorrer para fazer a compilação dos arquivos, e que também será o “tamanho” total da nossa barra de progresso
  • Logo em seguida temos duas linhas que vão definir exatamente: 1) o tamanho máximo da nossa barra de progresso, dado pela variável cont, ao percorrer todos os arquivos necessários da compilação; 2) que ela vai começar com seu valor em zero (e posteriormente vai ser preenchida)
  • Para fazer a compilação de dados de uma planilha, a planilha precisa ser aberta e fechada. Para a barra de progresso representar o progresso da compilação, ela deve mostrar o processo de fechamento dessas planilhas. Ou seja, quando todas forem fechadas, a barra vai estar completa. Então, cada unidade da barra será representada por um arquivo fechado. Logo após a linha do código para fechar a planilha aberta entrará a instrução que faz com que o novo valor da barra de progresso receba o antigo somado de uma unidade. Então, o valor da barra vai ser preenchido conforme a compilação for acontecendo.

Conclusão – ProgressBar no VBA

Nesse post vimos como criar, modificar e utilizar uma barra de progresso no VBA para que você consiga ver quando o código vai finalizar, ou acompanhar o seu andamento. A barra de progresso vai permitir verificar o progresso do código que foi desenvolvido, seja qualquer código.

Até o próximo post! Fique ligado no nosso canal do Youtube para mais conteúdo de VBA! Um abraço!

Hashtag Treinamentos

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


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

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!