1) a linha de código:
activeworkbook.quit
não faz sentido... remova-a.
2) O arquivo é reaberto para rodar o código de novo, após 1 segundo. vc precisa desprogramar o próximo segundo antes de wb.close SaveChanges:=False
no seu módulo3, crie uma global para guardar o valor da próxima execução, assim:
Public ProximoHorario As Date
Sub Temporizador()
ProximoHorario = Now + TimeValue("00:00:01")
'Chama a rotina Separadores após 1 segundo
Call Application.OnTime(ProximoHorario, "Separadores")
End Sub
E no seu módulo 2, cancele o próximo agendamento, e não reagende, assim:
Sub Separadores()
'Código de sua macro aqui
Dim wb As Workbook
Dim Resultado As VbMsgBoxResult
dim Reagendar as Boolean
Set wb = ThisWorkbook
Reagender = True
If Windows(wb.Name).DisplayWorkbookTabs = True Then
Resultado = MsgBox("Tem a certeza que quer ver os separadores?", vbYesNo, "Dúvida")
If Resultado = vbYes Then
MsgBox ("Até breve!")
Call Application.OnTime(EarliestTime:=ProximoHorario, Procedure:="Separadores", Schedule:=False)
Reagendar = False
wb.Close SaveChanges:=False
Else
ActiveWindow.DisplayWorkbookTabs = False
End If
End If
'Chama a rotina temporizador, que executará a
'SuaMacro após o tempo definido
If Reagendar then Call Temporizador
End Sub
Dica:
Eu não usaria o esquema de reagendamento e o ontime, com uma pergunta no meio, é que se não for bem planejado, e o usuário demorar mais de um segundo para responder e o código for disparado de novo, pode dar merda.
Claro que aparentemente não é seu caso, mas só, tome cuidado e teste com pessoas que demoram pra responder. Se der tudo certo, então fechô !
FF
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 01/03/2016 4:48 am