Condividi tramite

Application. OnTime - curiosità

Anonimo
2016-10-09T07:22:23+00:00

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

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2016-10-09T20:09:53+00:00

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

La risposta è stata utile?

0 commenti Nessun commento

0 risposte aggiuntive

Ordina per: Più utili