Application. OnTime - curiosità

Ciao a tutti

come da titolo, la mia è una curiosità.

ThisWorkbook:

Private Sub Workbook_Open()
CloseMe
End Sub

In un modulo:

Sub CloseMe()
    Application.OnTime Now + TimeValue("00:00:10"), "OpenMe"
    ThisWorkbook.Close False
End Sub
 
Sub OpenMe()
    MsgBox "Ciao"
End Sub

Semplicemente il file viene chiuso e riaperto dopo 10 sec.

La curiosità è la seguente: come fa excel a riaprire il file per eseguire la sub OpenMe() ?

Cioè dove viene "conservata" la schedulazione di "OpenMe" ?

grazie e cari saluti

domenico

 

Informazioni domanda


Ultimo aggiornamento febbraio 22, 2018 Visualizzazioni 101 Si applica a:
Risposta
Risposta

Ciao Domenico, 

come da titolo, la mia è una curiosità.

ThisWorkbook:

Private Sub Workbook_Open()
CloseMe
End Sub

In un modulo:

Sub CloseMe()
    Application.OnTime Now + TimeValue("00:00:10"), "OpenMe"
    ThisWorkbook.Close False
End Sub
 
Sub OpenMe()
    MsgBox "Ciao"
End Sub

Semplicemente il file viene chiuso e riaperto dopo 10 sec.

La curiosità è la seguente: come fa excel a riaprire il file per eseguire la sub OpenMe() ?

Cioè dove viene "conservata" la schedulazione di "OpenMe" ?

Il metodo OnTime è un metodo di Excel ed è indipendente di qualsiasi cartella di lavoro e chiamate al metodo sono gestite, come tutte le altre impostazioni dell'Applicazione, dall'Applicazione, ovvero Excel. 

Infatti, se il file in cui si trova la chiamata fosse chiusa prima che la procedura interessata sia stata eseguita, il file verrebbe riaperto per eseguire la macro. 

Come esempio banale, considera il seguente codice:

'=========>>
Option Explicit

'--------->>
Public RunWhen As Double
Public Const cRunIntervalSeconds = 10    '\\ 10 Secondi
Public Const cRunWhat = "myMacro"

'--------->>
Public Sub StartTimer()
    RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, _
                       Procedure:=cRunWhat, _
                       Schedule:=True
End Sub

'--------->>
Public Sub StopTimer()
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, _
                       Procedure:=cRunWhat, _
                       Schedule:=False
End Sub

'--------->>
Public Sub myMacro()
    Call MsgBox( _
         Prompt:="Ciao Domenico a: " _
               & vbNewLine _
               & Time, _
         Buttons:=vbInformation, _
         Title:="REPORT")
    StartTimer
End Sub
'<<=========

Ora avvia la macro StartTimer e immediatamente chiudi  il file. Dopo alcuni secondi, il file sarà riaperto da Excel per eseguire la procedura  miaMacro e vedrai il messaggio. Nota che, in  tal caso, il file verrebbe lasciato aperto by Excel.

===

Regards,

Norman

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.