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:
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:
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:
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:
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!
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.