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?
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 Follow @exceldoseujeito e ficar sempre atualizado das novidades aqui do site.
Até a próxima!
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
Olá Rubélio.
Coloquei sua resposta neste artigo aqui:
https://www.exceldoseujeito.com.br/2012/08/24/excel-perguntas-e-respostas-1/
Abç
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
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ç