Purtroppo (o per fortuna
) non ho Office 2010 quindi posso solo andare per ipotesi anche perché cercando in rete non ho trovato nessuno che lamenti differenze fra le due versioni quindi non ho nulla su cui lavorare.
Comunque un paio di prove possiamo farle.
La prima cosa che mi viene da pensare è che la OnTime di chiusura della Visualizza non riesca a trovare il timer da killare perché nel frattempo Now è cambiato e quindi Now + TimeValue("00:00:01") ha un valore diverso da quello che aveva quando il timer è partito.
In realtà mi sto arrampicando sugli specchi perché, visto che la Visualizza parte ogni secondo, qualunque sia il Now qualcosa di attivo in quel momento ci sarà di sicuro, però, chissà, magari excel 2010 utilizza un Now con una precisione maggiore e questo porta problemi di arrotondamenti
quindi tanto vale provare ad assegnare il valore Now + TimeValue("00:00:01") ad una variabile e poi usare quella sia nel loop che nel kill.
codice:
Dim dTime
Private Sub Countdown()
ThisWorkbook.Sheets(1).[c2] = TimeValue("00:10:00")
Visualizza
End Sub
Private Sub Visualizza()
Dim TempoRimanente As Date
TempoRimanente = ThisWorkbook.Sheets(1).[c2]
ThisWorkbook.Sheets(1).[c2] = TempoRimanente - TimeValue("00:00:01")
dTime = Now + TimeValue("00:00:01")
Application.OnTime dTime, "Visualizza"
End Sub
Private Sub Chiudi()
Application.DisplayAlerts = False
ThisWorkbook.Save
If Application.Workbooks.Count = 1 Then
Application.Quit
Else
Application.OnTime dTime, "Visualizza", , False
ThisWorkbook.Close
End If
End Sub
La nuova variabile come vedi è la dTime che viene calcolata in un solo punto e poi utilizzata sia per attivare che per killare il timer.
L'unica altra prova che mi viene in mente è di provare a passare i paramentri alla OnTime indicandone esplicitamente i nomi, chissà mai ...
codice:
Dim dTime
Private Sub Countdown()
ThisWorkbook.Sheets(1).[c2] = TimeValue("00:10:00")
Visualizza
End Sub
Private Sub Visualizza()
Dim TempoRimanente As Date
TempoRimanente = ThisWorkbook.Sheets(1).[c2]
ThisWorkbook.Sheets(1).[c2] = TempoRimanente - TimeValue("00:00:01")
dTime = Now + TimeValue("00:00:01")
Application.OnTime EarliestTime:=dTime, Procedure:="Visualizza"
End Sub
Private Sub Chiudi()
Application.DisplayAlerts = False
ThisWorkbook.Save
If Application.Workbooks.Count = 1 Then
Application.Quit
Else
Application.OnTime EarliestTime:=dTime, Procedure:="Visualizza", Schedule:=False
ThisWorkbook.Close
End If
End Sub
Per ora non mi viene in mente nient'altro, fammi sapere come va.