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 uma resposta para Reinaldo Coral Cancelar resposta