Exibindo uma barra de progresso – Parte 2 – Excel do Seu Jeito
Exibindo uma barra de progresso – Parte 2
No artigo anterior, escrevi uma macro para exibir na barra de status do Excel o andamento de um processo em execução em seu projeto VBA. Clique aqui para ler agora.
Hoje, vou continuar abordando este tema e adicionando algumas técnicas que darão um ar ainda mais profissional aos seus projetos. Que tal exibir uma barra de progresso gráfica, com contador, igual a esta da imagem abaixo?
Muito legal! E nós vamos construir uma dessas agora. Vamos começar?
Primeiramente, vou definir o que vamos precisar para a construção dessa macro.
1 Userform que vamos alterar seu nome para "frmBarraDeProgresso";
1 Label que vamos nomeá-lo "progressBar";
1 Frame que terá sua propriedade Name alterada para "framePb";
1 Módulo global onde vamos escrever nossa macro.
Para iniciar a tela do VBA, use o atalho ALT+F11.
Configurando o formulário
Insira um formulário ao projeto (Inserir > UserForm) e altere sua propriedade Name para frmBarraDeProgresso.
Coloque o controle Frame e altere suas propriedades abaixo:
Name = framePb;
Caption = 0%;
SpecialEffect = 2;
Coloque o controle Label dentro do framePb e mude suas propriedades a seguir:
Name = progressBar;
Caption = (deixe em branco);
SpecialEffect = 1;
Ajuste o tamanho do formulário e do framePb conforme desejar, de maneira que se aproxime do modelo mostrado aqui na figura 1.
Configurando o código que será executado
Vamos usar o mesmo código de exemplo que utilizamos no artigo anterior, você pode definir o seu próprio código, caso já o tenha. Neste exemplo, a macro vai percorrer todos os registros do catálogo de telefones e exibir uma mensagem ao lado de cada registro. Isto é apenas um exemplo para estudo. Esse código deve ser escrito no Módulo1.
Private Sub MinhaMacro(ByVal rCell As Range)
Select Case CInt(Left(.Offset(0, 1).Value, 1))
Case 7, 8, 9
.Offset(0, 2).Value = "Oi, " & .Value & ". Este número de telefone parece ser um celular!"
.Offset(0, 2).Value = "Oi, " & .Value
Configurando o código da Barra de Progresso
Esse é o código que executa a chamada do formulário frmBarraDeProgresso e implementa toda a rotina de análise do andamento do processo. Esse código também deve ser escrito no Módulo1.
Sub BarraDeProgresso()
Dim iUltimaLinha    As Long
Dim iPercentualConcluido As Double
iUltimaLinha = ActiveSheet.Range("A1").End(xlDown).Row
frmBarraDeProgresso.Show False
For i = 2 To iUltimaLinha
iPercentualConcluido = i / iUltimaLinha
With frmBarraDeProgresso
.framePb.Caption = Format(iPercentualConcluido, "0%") & " Concluído"
.progressBar.Width = iPercentualConcluido * (.framePb.Width - 10)
DoEvents    'Permite que sejam visualizadas as mudanças nos controles do formulário
' O código da sua macro vai aqui
Call MinhaMacro(ActiveSheet.Cells(i, 1))
Unload frmBarraDeProgresso
MsgBox "Processo concluído.", vbInformation, "Excel do Seu Jeito"
Faça o download do arquivo de exemplo para testar esta macro vba. O link para baixar está no final do artigo.
Este código exibe tanto uma barrinha de progresso do processamento da sua macro como o percentual já executado. Muito útil em processos longos e demorados.
Espero que seja bem útil para vocês.
E para quem ainda não segue o @exceldoseujeito no twitter, fica aqui o convite para Follow @exceldoseujeito e ficar sempre atualizado das novidades aqui do site.
Categorias Dicas, Formulários, VBA Tags Excel, excel avançado, Macro, VBA, via código Navegação de post
Exibindo uma barra de progresso numa macro VBA
6 comentários em "Exibindo uma barra de progresso – Parte 2"
Pingback: Barra de Progresso « Conhecendo VBA
Rubélio
Eu procurava por um exemplo deste que possa ocorrer enquanto a macro roda, porém minha macro processa diversas planilhas (atuais 35 e que podem ser acrescidas) e em cada planilha desse arquivo executa alterações em 33 colunas e em diversas linhas, cujo número também é variável.
Como posso adaptar essa barra a minha macro?
24 de agosto de 2012 às 00:06
Olá Rubélio.
Coloquei sua resposta neste artigo aqui:
https://www.exceldoseujeito.com.br/2012/08/24/excel-perguntas-e-respostas-1/
Pingback: Excel – Perguntas e Respostas #1 : Excel do Seu Jeito
12 de setembro de 2012 às 12:51
Parabéns e obrigado pelo excelente material que vocês nos disponibilizam.
Estou buscando uma fórmula que extraia dos e-mails, o nome antes da arroba e depois da arroba, excluindo .com.br etc, aparecendo em colunas separadas.
ex: antoniosilva@teste.com [editado pelo moderador]
teste [editado pelo moderador]
12 de setembro de 2012 às 13:27
Supondo que o email esteja na célula A1.
Para extrair o nome:
=ESQUERDA(A1;LOCALIZAR("@";A1)-1)
Para extrair a parte após o arroba sem o .com:
=EXT.TEXTO(A1;LOCALIZAR("@";A1)+1;LOCALIZAR(".";A1;LOCALIZAR("@";A1))-LOCALIZAR("@";A1)-1)
Só um detalhe: Não existe uma maneira de deixar o nome desmembrado como você quer, pois não há como algoritimo adivinhar qual parte é para desmembrar.