Como Fazer uma Barra de Progresso no Excel com VBA

Você roda uma macro que processa milhares de linhas, consolida várias planilhas ou faz um cálculo pesado, e a tela do Excel simplesmente congela por alguns segundos ou minutos, sem nenhum sinal de que algo está acontecendo. Quem está usando a planilha não sabe se o processo travou, se ainda está rodando, ou quanto tempo falta para terminar.

Sem um indicador visual, o usuário acaba clicando várias vezes no botão da macro achando que não funcionou, ou até fechando o Excel no meio do processamento, achando que travou de verdade. Isso é especialmente problemático em planilhas usadas por outras pessoas da equipe, que não têm como saber se aquele “congelamento” é normal ou é um erro.

Neste artigo iremos mostrar como criar uma barra de progresso no Excel usando VBA, tanto a versão mais simples usando a barra de status do próprio Excel quanto a versão mais visual, com um formulário (UserForm) dedicado que mostra o percentual concluído em tempo real.

Youtube

Assista ao vídeo abaixo, caso prefira aprender a como fazer uma barra de progresso no Excel assistindo a um vídeo.

DOMINE EXCEL COMIGO

QUERO APRENDER EXCEL

Não se esqueça de se INSCREVER no nosso canal.

Versão simples: usando a barra de status do Excel

A forma mais rápida de dar um retorno visual ao usuário, sem precisar desenhar nenhum formulário, é usar a propriedade Application.StatusBar, que escreve um texto na barra cinza no rodapé da janela do Excel. Dentro de um loop que processa várias linhas, você atualiza essa barra a cada volta do laço, mostrando o percentual concluído:

Sub ProcessarComBarraDeStatus()

Dim i As Long
Dim totalLinhas As Long
totalLinhas = 1000

For i = 1 To totalLinhas

    'aqui entraria o processamento real de cada linha

    Application.StatusBar = "Processando... " & Format(i / totalLinhas, "0%") & " concluído"
    DoEvents

Next i

Application.StatusBar = False

End Sub

O comando DoEvents dentro do loop é essencial: ele força o Excel a atualizar a tela e responder a outros eventos do sistema operacional antes de continuar o processamento, garantindo que o texto da barra de status realmente apareça atualizado a cada iteração, em vez de só aparecer no final. Ao fim do processo, Application.StatusBar = False devolve o controle da barra de status para o Excel, que volta a mostrar as informações padrão (como soma e contagem de células selecionadas).

Essa abordagem é ideal para macros internas, usadas só por quem já conhece o Excel, porque é simples de implementar e não exige nenhum desenho de tela adicional — apenas texto discreto no rodapé.

Versão visual: criando um UserForm com barra de progresso

Para uma experiência mais profissional, especialmente em planilhas que serão usadas por outras pessoas, vale criar um UserForm dedicado com uma barra de progresso visual, daquelas que enchem de cor conforme o processo avança.

O primeiro passo é abrir o editor do VBA (Alt+F11), clicar com o botão direito no projeto e escolher Inserir > UserForm. Dentro do UserForm, adicione dois controles da caixa de ferramentas: um Label (rótulo), que vai servir como o “fundo” cinza da barra, e um segundo Label menor dentro (ou sobreposto) ao primeiro, que vai ser preenchido de cor e ter sua largura ajustada dinamicamente para simular o preenchimento da barra.

Configure o Label de fundo com uma borda visível e cor de fundo cinza claro, nomeando-o, por exemplo, lblFundo. Configure o Label interno com uma cor de destaque (como azul ou verde), nomeando-o lblProgresso, e deixe sua largura inicial em zero. No código, a lógica é simples: a cada iteração do processamento, você recalcula a largura do lblProgresso como uma proporção da largura total do lblFundo:

Sub AtualizarBarra(percentual As Double)

With UserForm1
    .lblProgresso.Width = .lblFundo.Width * percentual
    .Label_Percentual.Caption = Format(percentual, "0%")
End With

DoEvents

End Sub

Dentro do loop principal da sua macro, você chama essa função a cada volta, passando o percentual concluído até aquele ponto (calculado como linha atual dividida pelo total de linhas). O resultado visual é uma barra que cresce da esquerda para a direita conforme o processamento avança, com um texto de percentual atualizado ao lado.

Exibindo o formulário e fechando ao final

Para que o UserForm apareça na tela enquanto a macro roda, use UserForm1.Show vbModeless no início da macro principal, antes do loop de processamento. O parâmetro vbModeless é importante porque permite que o código continue executando enquanto o formulário está visível — sem ele, o Excel travaria esperando você fechar o formulário antes de continuar rodando o código.

Ao final do processamento, feche o formulário automaticamente com Unload UserForm1, para que o usuário não precise fechá-lo manualmente. Uma macro completa juntando as duas peças fica assim:

Sub ProcessarComBarraVisual()

Dim i As Long, totalLinhas As Long
totalLinhas = 1000

UserForm1.Show vbModeless

For i = 1 To totalLinhas

    'processamento real de cada linha aqui

    AtualizarBarra i / totalLinhas
Next i

Unload UserForm1
MsgBox "Processamento concluído!"

End Sub

Cuidados para a barra de progresso não deixar a macro mais lenta

Atualizar a tela a cada linha processada tem um custo de desempenho, especialmente em loops muito longos, com dezenas de milhares de linhas. Para evitar que a própria barra de progresso torne o processo mais lento do que precisaria ser, atualize a barra a cada bloco de linhas (por exemplo, a cada 50 ou 100 linhas), em vez de a cada linha individual, usando uma verificação como If i Mod 50 = 0 Then.

Também vale desativar temporariamente o recálculo automático de fórmulas e a atualização de tela padrão do Excel (Application.ScreenUpdating = False e Application.Calculation = xlCalculationManual) durante o processamento, reativando ambos ao final. Isso reduz drasticamente o tempo total de execução em planilhas grandes, mesmo com a barra de progresso sendo atualizada periodicamente.

✅ Use Application.StatusBar para macros internas rápidas de implementar, sem exigir desenho de formulário.

❌ Não atualize a barra de progresso a cada linha em loops com milhares de iterações — atualize a cada bloco de linhas para não prejudicar a performance da macro.

Disponibilidade em outras versões

A criação de UserForms e o uso de Application.StatusBar funcionam em todas as versões do Excel para Windows com suporte a VBA: Excel 2010, 2013, 2016, 2019 e 365. O Excel para Mac também suporta VBA e UserForms, embora a aba Desenvolvedor precise ser habilitada separadamente e algumas versões mais antigas do Mac tenham suporte parcial a determinados controles de formulário. O Excel Online e o Google Sheets não suportam VBA nem UserForms, então essas técnicas exigem a versão desktop do Excel.

Perguntas frequentes

Como mostrar o progresso de uma macro sem criar um formulário?

Use a propriedade Application.StatusBar dentro do loop da macro, atualizando o texto a cada iteração com o percentual concluído, e adicione DoEvents para forçar a atualização da tela. Ao final, defina Application.StatusBar = False para devolver o controle ao Excel.

Por que preciso usar DoEvents na barra de progresso?

Porque o VBA, por padrão, não atualiza a tela durante a execução de um loop — ele só redesenha a interface quando o código termina ou pausa. O comando DoEvents força essa atualização a cada iteração, permitindo que o usuário veja o progresso em tempo real.

Como criar uma barra de progresso visual, com uma barra que se enche de cor?

Crie um UserForm com dois Labels sobrepostos: um de fundo cinza e outro colorido, cuja largura você recalcula a cada iteração como uma proporção da largura total, com base no percentual concluído. Exiba o formulário com UserForm1.Show vbModeless para que o código continue rodando com o formulário visível.

Compartilhe ou Comente

Se você curtiu esse artigo aonde mostramos como fazer uma barra de progresso no Excel com VBA, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.

Você já usa alguma macro que demora para processar e daria pra ganhar uma barra de progresso? Prefere a versão simples da barra de status ou a versão visual com UserForm? Conta para nós nos comentários!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *