Notifications
Clear all

EXECUTAR MACROS A CADA 5 MINUTOS

10 Posts
3 Usuários
0 Reactions
2,986 Visualizações
 CZa
(@cza)
Posts: 61
Trusted Member
Topic starter
 

Boa noite pessoal!

Seguinte, tenho uma pasta que possui algumas macros que são acionadas com ao clicar sobre um botão de "Clique aqui para atualizar" e gostaria de adapta-la para seja atualizada automaticamente a cada 5 minutos. Como se fosse uma macro para executar outra série de macros a cada 5 minutos...

Alguém consegue dar uma força?

 
Postado : 28/03/2016 6:42 pm
(@mprudencio)
Posts: 0
New Member
 

Nem vi o arquivo mas nao seria mais interessante atualizar apos a alteração de determinada celula.

 
Postado : 28/03/2016 7:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Nem precisa da planilha se você já explicou, a não ser que tenha algo mais alem da questão de executar uma macro a cada 5 minutos.

Para executar uma rotina a cada 5 minutos faça o seguinte :
De dois cliques em EstaPasta_de_trabalho e cole as rotinas abaixo :

Private Sub Workbook_Open()
    'Chama a rotina com o tempo definido
    Call ExecutaTempo5min
    
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Cancela a execução do tempo
    On Error Resume Next
    Application.OnTime EarliestTime:=DownTime, Procedure:="ExecutaTempo5min", Schedule:=False

End Sub

Em um outro Modulo cole esta :

Sub ExecutaTempo5min()
    'Executa a cada 5 minutos
    DownTime = Now + TimeValue("00:05:00")
    
    'Altere o nome de "NomedaMacroaExecutar"
    'para a rotina associada ao seu botão  "Clique aqui para atualizar"
    Application.OnTime DownTime, "NomedaMacroaExecutar"

End Sub

A macro "NomedaMacroaExecutar" será executada a cada 5 minutos.

 
Postado : 28/03/2016 8:23 pm
 CZa
(@cza)
Posts: 61
Trusted Member
Topic starter
 

Marcelo, não seria pois antes de atualizar tenho alguns campos à atualizar, e caso colocasse para atualizar sempre que altero alguma célula já sabe né...

Mauro, até que deu certo... Mas só uma vez e quando abri, depois não executou as macros novamente... Talvez eu que não esteja conseguindo fazer a adaptação.

 
Postado : 28/03/2016 9:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Um detalhe que acabei esquecendo, ao fim da sua macro tem de ser reiniciado o tempo chamando a rotina novamente

Baseado no link abaixo fiz um modelo, de uma olhada
'Scheduling Events With OnTime And Windows Timers
'http://www.cpearson.com/excel/ontime.aspx

Ontime Schedule

Adapte ao seu modelo e faça os testes, qq coisa retorne.

[]s

 
Postado : 29/03/2016 1:48 pm
 CZa
(@cza)
Posts: 61
Trusted Member
Topic starter
 

PERFEITO, Mauro!

Fiz alguns ajustes e o resultado final foi o esperado. Porém só queria um auxilio seu se é possível adaptar essa rotina com variáveis...

Tenho duas guias ("FOLLOW E RECEBIMENTO" e "FOLLOW E FISCAL"), é possível inserir um comando IF para a macro que for executada automaticamente ao atingir o tempo que foi definido executar de acordo com a guia que está aberta?

Por exemplo,
Se estou na aba "FOLLOW E RECEBIMENTO", ele chama a macro "Atualizar_Follow_Recebimento"
Se estou na aba "FOLLOW E FISCAL" ele chama a macro "Atualizar_Follow_Fiscal"

Desde já, muito obrigado!

 
Postado : 29/03/2016 6:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se entendi, no modelo que enviei, troque todas as rotinas que estão no Modulo2 pelas as abaixo.

Ao abrir clique em "Parar Tempo", depois, adicione mais uma aba e altere os nomes das duas abas para "FOLLOW E RECEBIMENTO" e "FOLLOW E FISCAL", salve e clique em reiniciar, e veja se é isto :

'Scheduling Events With OnTime And Windows Timers
'http://www.cpearson.com/excel/ontime.aspx

Public RunWhen As Double

'Troque "NomedaMacroaExecutar" pelo Nome da sua macro a executar
Public Const RunWhat = "NomedaMacroaExecutar"
 
'Ajuste o tempo, está definido para a cada 5 segundos
Sub ExecutaTempo5min()
    RunWhen = Now + TimeValue("00:00:05")
    Application.OnTime earliesttime:=RunWhen, procedure:=RunWhat, schedule:=True
End Sub
 
 Sub StopTimer()
    On Error Resume Next
    Application.OnTime earliesttime:=RunWhen, procedure:=RunWhat, schedule:=False
End Sub

Sub NomedaMacroaExecutar()

    MsgBox "Primeiros 5 min"
    
    Call activeshet
   
End Sub

Sub activeshet()
    Dim sActiveShet
    
    sActiveShet = ActiveSheet.Name
    
    If sActiveShet = "FOLLOW E RECEBIMENTO" Then
        Call FOLLOW_E_RECEBIMENTO
    
    ElseIf sActiveShet = "FOLLOW E FISCAL" Then
        Call FOLLOW_E_FISCAL
        
    End If

End Sub

Sub FOLLOW_E_RECEBIMENTO()

    MsgBox "Passou mais 5 min e estou na aba FOLLOW E RECEBIMENTO"
    
    Call ExecutaTempo5min
    
End Sub

Sub FOLLOW_E_FISCAL()

    MsgBox "Passou mais 5 min e estou na aba FOLLOW E FISCAL"
    
    Call ExecutaTempo5min
    
End Sub
 
Postado : 29/03/2016 9:57 pm
 CZa
(@cza)
Posts: 61
Trusted Member
Topic starter
 

Na rotina dentro de EstaPasta_de_trabalho não altera em nada?

 
Postado : 29/03/2016 10:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na rotina dentro de EstaPasta_de_trabalho não altera em nada?

Não, só as do modulo, alias nem precisava ser todas do modulo, só coloquei para evitar de repetir e dar erros.

 
Postado : 29/03/2016 10:10 pm
 CZa
(@cza)
Posts: 61
Trusted Member
Topic starter
 

Mauro, funcionou perfeitamente mano...

Muito obrigado pela ajuda cara...

 
Postado : 29/03/2016 10:26 pm