VBA - Artigo 009 - Criando uma barra de progresso em formulários


Criando uma barra de progresso em formulários

Em processamentos longos, é sempre bom colocar um indicador de progresso para que o usuário tenha uma noção do que está acontecendo no momento. Colocar uma mensagem com o progresso na barra de status é uma ótima ideia e cumpre bem sua função, mas e se quisermos sofisticar um pouco mais?

Que tal abrir um pequeno formulário com uma barra indicando o progresso? É um efeito visual mais legal e deve deixar o usuário impressionado.

Crie um formulário e adicione um rótulo para colocar o texto com a mensagem indicando o progresso, colocando um nome como lblMensagem, por exemplo.

Em seguida, adicione outro rótulo, nomeie como lblFundo, apague o conteúdo da Caption, altere a cor de fundo (BackColor) para branco e acrescente a borda (BorderStyle = 1 - fmBorderStyleSingle). Deixe a altura (Height) em 20 e a largura (Width) em 104.
Por fim, faça uma cópia desse rótulo e batize como lblProgresso. Altere a cor para azul, retire a borda, defina a altura em 16 e a largura em 100. Posicione dois pixels abaixo e dois à direita da posição do lblFundo, colocando esse rótulo por cima.

Posicione os objetos no formulário, altere o tamanho do formulário para algo mais apropriado e coloque um título. O resultado deve ser algo assim:



Por fim, altere a largura de lblProgresso para 0, que será o valor inicial. A parte de desenho está feita, agora só falta o código.

No seu código deverá haver uma estrutura de repetição onde acontecerá a maior parte do processamento. É imediatamente acima dessa estrutura que deverá ser feito o carregamento do formulário.

frmProcessamento.Show
For Iteracao = ValorInicial To ValorFinal
...

No começo dessa estrutura de repetição deve ser calculado o percentual atual do processamento. A conta é simples: PosicaoAtual dividido por ValorFinal multiplicado por 100, com ValorInicial valendo 1. É este valor que será associado à largura da barra de processamento. Você pode associar diretamente, sem criar uma variável intermediária.

frmProcessamento.Show
For PosicaoAtual = ValorInicial To ValorFinal
    lblProgresso.Width = CInt(PosicaoAtual / ValorFinal * 100)
...

Não se esqueça de alterar o texto do rótulo de mensagem para indicar o status do processamento.

lblMensagem.Caption = "Andamento: " & lblProgresso.Width & "%"

Se você processar agora, verá que nada acontece e o formulário permanece igual a quando carregou. É que está faltando pedir ao Excel atualizar o formulário:

frmProcessamento.Repaint

Por fim, não se esqueça de remover o formulário quando terminar o processo. Pode ser logo após o final da estrutura de repetição, mas prefiro no final do processo.

Unload frmProcessamento

Agora está funcionando. O formulário deve abrir, exibir o progresso enquanto está processando e, ao terminar, o formulário desaparece.
Se quiser colocar um atraso antes de fechar o formulário, para que o usuário veja a barra exibindo os 100% completados, pode colocar este comando:

Application.Wait (Now + TimeValue("00:00:01"))

Esse comando Wait para todo o processamento até o horário especificado dentro dos parênteses. O horário no comando acima é um segundo após o instante em que chegar nesse ponto do processamento (Now).
Você ainda pode incrementar esse formulário com uma imagem e outros elementos que ajudem a deixar o usuário impressionado. Deixe com uma aparência bem profissional e de bom gosto.

Este artigo foi bem curto em comparação com os anteriores, mas ainda assim acredito que tenha gostado bastante desta dica.

Pedro Martins


Formado em Tecnologia em Eletrônica Digital, já trabalhou como artefinalista, eletrotécnico, programador de CLP (para máquinas industriais) e analista de sistemas em sistema bancário, programando em COBOL.
Mexe com computadores e programação desde a segunda metade dos anos 1980, quando teve um MSX e aprendeu a programar em BASIC. É a favor da disseminação do conhecimento.




Catálogo de aulas (NOVIDADE)

Criei um catálogo de aulas para ajudar você em seus estudos. Acesse clicando na imagem abaixo ou clique aqui.


Postagem Anterior Próxima Postagem