Exibindo uma barra de progresso – Parte 2

Oi pessoal.
 
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?
 

Figura 1

 
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;
Height = 15;
Width = 5;
 
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)
    With rCell
        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!"
            Case Else
                .Offset(0, 2).Value = "Oi, " & .Value
        End Select
    End With
End Sub

 
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 i               As Long
Dim iUltimaLinha    As Long
Dim iPercentualConcluido As Double
    Application.ScreenUpdating = False
    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)
        End With
        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))
    Next
    Unload frmBarraDeProgresso
    MsgBox "Processo concluído.", vbInformation, "Excel do Seu Jeito"
End Sub

 
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 e ficar sempre atualizado das novidades aqui do site.
 
Até a próxima!

6 comentários em “Exibindo uma barra de progresso – Parte 2”

  1. Boa tarde!
    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?
    Abç.
    Rubélio

    Responder
  2. Olá caros amigos,
    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]
    Coluna 1
    Antonio Silva
    Coluna 2
    teste [editado pelo moderador]
    Vocês podem me ajudar?
    Abs,
    Carlos

    Responder
    • Olá Carlos.
      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.
      Abç

      Responder

Deixe um comentário