Notifications
Clear all

Barra de Progresso/Status

22 Posts
2 Usuários
0 Reactions
4,613 Visualizações
(@cs1508)
Posts: 0
New Member
Topic starter
 

Olá a todos,

Tenho um projecto em excel que está em funcionamento na empresa, num tablet windows. Tenho vindo a aprimorar alguns pormenores ao longo do tempo. Agora, gostaria de colocar uma barra de progresso/status quando é executada determinada macro. Devido ao facto de estar a funcionar no tablet a execução desta macro é um pouco lenta. Já vi na net vários exemplos inclusivamente aqui no planilhando, mas infelizmente não consigo adaptar ao meu projecto. Segue a macro em questão. Agradece desde já a vossa disponibilidade e ajuda, tem sido importante.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
    Application.DisplayFormulaBar = True
    ActiveWindow.DisplayHeadings = True
End Sub

Private Sub Workbook_Open()
 Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
    Application.DisplayFormulaBar = False
    ActiveWindow.DisplayHeadings = False
    Application.DisplayStatusBar = False
End Sub


Sub Gravar()
Dim Data As Date
Dim Funcionario As String
Dim Obra As String
Dim Cliente As String
Dim HorasTotais As Double
Dim HorasExtras As Double

Dim UltimaCel As Integer

Dim RespostaConfirmaçãoAZero As Integer

Dim ConfirmaçãoRepetida As Integer
                
Application.ScreenUpdating = False
Application.EnableEvents = False


     If Range("G16") = 1 Then
     ConfirmaçãoRepetida = MsgBox("Já foram inseridas as horas para este funcionario na data de hoje, deseja prosseguir?", _
     vbYesNo + vbQuestion, "Confirmação de gravação de Horas")
     If ConfirmaçãoRepetida = vbNo Then
     MsgBox "Caso queira inserir horas de outro dia em falta, escreva o dia no campo Tarefa/Outras Anotações.", vbOKOnly + vbInformation, "Informação"
     Exit Sub
     End If
    End If

        
 Data = Range("G3").Value
 Funcionario = Range("B5").Value
 Obra = Range("B9").Value
 Cliente = Range("B7").Value
 HorasTotais = Range("C11").Value
    
    If Range("c11") = 0 Then
        RespostaConfirmaçãoAZero = MsgBox("Confirmar as Horas Totais de Hoje a 0 (zero)?", vbYesNo + vbQuestion, "Confirmação")
        If RespostaConfirmaçãoAZero = vbNo Then
        MsgBox "Insira as horas correctamente!", vbOKOnly + vbExclamation, "Correcção de Horas"
        Exit Sub
        End If
    End If
    
 HorasExtras = Range("C13").Value
  
 
Sheets("Registo de Ponto Diário").Activate

UltimaCel = Range("A1000000").End(xlUp).Row + 1


 Range("A" & UltimaCel).Value = Data
 Range("B" & UltimaCel).Value = Funcionario
 Range("C" & UltimaCel).Value = Obra
 Range("D" & UltimaCel).Value = Cliente
 Range("E" & UltimaCel).Value = HorasTotais
 Range("F" & UltimaCel).Value = HorasExtras
 


Sheets("Relógio de Ponto").Activate

  
Range("B9").Value = ""
Range("C11").Value = ""


ActiveWorkbook.Save
  
MsgBox "Gravado com Sucesso!", vbOKOnly + vbInformation, "Gravação de Dados"


Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

 
Postado : 13/05/2016 4:09 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Olá a todos.

Será que alguém poderá ajudar?!

 
Postado : 17/05/2016 6:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Veja aqui, tem alguns exemplos
http://www.andypope.info/vba/pmeter.htm

Att

 
Postado : 17/05/2016 7:06 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Olá alexandrevba,

Consegui, através dos exemplos, configurar, mais ou menos o que pretendo. Mas, chamando o userform na minha macro, ele não deixa a macro prosseguir caso não se feche a janela. A própria barra de progresso não avança. Veja o anexo, por favor. Obrigada.

 
Postado : 17/05/2016 7:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu não encontrei o seu código!

O que quer executar? apenas a barra de progresso?

Att

 
Postado : 17/05/2016 8:14 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Oi,

Pretendo que a barra de progresso apareça enquanto a macro "gravar" corre (a macro "gravar" está em "Este livro").

Att.

 
Postado : 17/05/2016 8:34 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

E assim que a macro grave (ActiveWorkbook.Save), a barra de progresso desapareça automaticamente antes do MsgBox ("Gravado com Sucesso!").

Att.

 
Postado : 17/05/2016 8:38 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Olá a todos,

Não tenho certeza se será possível colocar a barra de progresso a funcionar junto com a macro, da forma como pretendo.

Ainda não consegui avançar... Se alguém conseguir ajudar agradeço.

Atentamente.

 
Postado : 19/05/2016 3:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Veja se consegue adaptar.
Aperte o botão GRAVAR na guia Relógio de Ponto

Att

 
Postado : 19/05/2016 6:21 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Olá alexandrevba,

Tentei adaptar ao meu projecto, mas infelizmente não estou conseguindo. Aparece um erro no código que eu não consigo entender, pois supostamente está correcto - Imagem1. Depois, esse erro bloqueia a barra de progresso que fica conforme Imagem2, até que feche o VBA.

A macro gravar verifica o conteúdo das células G16 e C11 na guia Relógio de Ponto (e poderá não avançar se a resposta do utilizador for negativa), depois copia da guia Relógio de Ponto para a guia Registo de Ponto Diário, as colunas data, funcionário, obra, cliente, horas extras e horas totais, e por fim coloca as colunas B9 e C11 vazias. A ideia seria colocar a barra de progresso evoluindo à medida que a macro vai executando as suas funções.

Obrigada.

 
Postado : 19/05/2016 9:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Qual o erro aparece?

Verifique se isso não está ligado ao código ou ao projetoVB.

Se o erro for no projeto VB e estiver ocorrendo no código cujo não erro de sintax.
Na hora do erro, click em Depurar depois Ctrl + Pause/Break duas vezes,depois rode a macro novamente!

Att

 
Postado : 19/05/2016 10:39 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Boa tarde!!

Talvez não me tenha expressado bem. Ao rodar a macro, e excel abre o vba e é preenchido a amarelo parte do código, tal como na imagem1.

 
Postado : 19/05/2016 10:47 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Se você remover a chamada (código que chama o userform), roda normal?

Verificou se ha erro em seu código (isso pode envolver o local onde a chamada está sendo feita)

Att

 
Postado : 19/05/2016 11:28 am
(@cs1508)
Posts: 0
New Member
Topic starter
 

Oi Alexandrevba,

Antes de mais, os meus agradecimentos.

Estou conseguindo colocar a barra de progresso no meu projeto, no entanto, está muito lenta. Sabe me dizer se a barra de progresso está evoluindo à medida que a macro vai executando os passos? Já alterei os valores no código que vc fez (e verifiquei que por aí pode a barra de progresso avançar mais rápido), mas mesmo assim, não sei se avança conforme a macro, pois infelizmente não sou profissional na área.

Sub code()

Dim i As Integer, j As Integer, pctCompl As Single

For i = 1 To 100
    For j = 1 To 1
    Cells(i, 1).Value = j
    Next j
    pctCompl = i
    progress pctCompl
Next i

End Sub

Eis a minha dúvida: a macro em Private Sub UserForm_Activate() executa cerca de 10/12 rotinas (verifica células, e copia outras células de uma guia para outra), a barra de progresso avança à medida que a macro vai realizando os passos?

Att.

 
Postado : 23/05/2016 6:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Para saber se a barra está funcionando, execute ela separada, sem qualquer rotina sua.

Depois peque uma rotina pequena que você precisa executar, associe a chamada da rotina que controla a barra de progresso.

Obs: favor tomar cuidado com a execução, pois antes seus recursos não tinha essa interação, imagine que se vai executar um form aberto e vai chamar outro form, sua rotina deverá ser preparada tal, há outras cosias que devem ser consideradas além desse exemplo

Ex:

Sub Rotina_Principal()

Call BarraDeProgresso ou Show UserFormTal

'Em background
Call Minhas_rotinas

End Sub

Att

 
Postado : 23/05/2016 7:44 am
Página 1 / 2