Chiudere un foglio in automatico ( Countdown )

ibernet

Utente junior
31 Maggio 2019
41
25
18
O365
1
In allegato trovate l'esempio pratico di quanto descritto sotto

Il codice è composto da due parti che vanno posizionate in punti diversi:

Visual Basic:
Private Sub Workbook_Open()
   Application.OnTime Now + TimeValue("00:10:00"), "Chiudi"
   Application.OnTime Now,+ TimeValue("00:00:01"), "Countdown"
End Sub

' ----------------------------------

Private Sub Countdown()
   Sheets(1).[c2] = TimeValue("00:10:00")
   Visualizza
End Sub
Private Sub Visualizza()
Dim TempoRimanente As Date
   TempoRimanente = ActiveSheet.Range("C2")
   Sheets(1).[c2] = TempoRimanente - TimeValue("00:00:01")
   Application.OnTime Now + TimeValue("00:00:01"), "Visualizza"
End Sub
Private Sub Chiudi()
   Application.DisplayAlerts = False
   ThisWorkbook.Save
   Application.Quit
End Sub
La prima sub intercetta l'evento di apertura del foglio e fa partire dopo 10 minuti la routine Chiudi e subito la routine Countdown.
La routine deve essere posizionata nel modulo che comanda la cartella di lavoro.

Sulla Chiudi c'è poco da dire: salva e chiude.

La Countdown invece ricalcola l'orario di fine rieseguendo la somma dei dieci minuti e poi visualizza il countdown e richiama se stessa ogni secondo.
Nota che la variabile fine deve essere definita fuori dalle sub per essere globale e poter essere utilizzata sia dalla Countdown che dalla Visualizza.

La cosa quindi è abbastanza semplice, ci sono però alcuni punti di attenzione.
Il primo è che, dopo aver aperto l'editor con ALT+F11, dovete individuare nell'albero dei progetti i punti esatti in cui inserire i due codici.

La prima parte la dovete mettere nel foglio ThisWorkbook all'interno della cartella Microsoft Excel Oggetti e la seconda parte nella cartella Moduli nel foglio Modulo1 (o in un altro se già ce ne sono). Se non avete la cartella moduli la potete inserire col tasto destro.

Infine nella casella dove inserire il countdown dovete dare il formato personalizzato mm.ss


Questo secondo codice è uguale a quello sopra a differenza che non usa una cella di appoggio per fare il calcolo del tempo rimanente (viene utilizzata una variabile globale)
Visual Basic:
Private Sub Workbook_Open()
   Application.OnTime Now + TimeValue("00:10:00"), "Chiudi"
   Application.OnTime Now,+ TimeValue("00:00:01"), "Countdown"
End Sub

' ----------------------------------

Dim fine
Private Sub Countdown()
   fine = Now + TimeValue("00:10:00")
   Visualizza
End Sub
Private Sub Visualizza()
   Sheets(1).[C2] = fine - Now()
   Application.OnTime Now + TimeValue("00:00:01"), "Visualizza"
End Sub
Private Sub Chiudi()
   ThisWorkbook.Save
   Application.Quit
End Sub
 

Allegati

  • Like
Reactions: ges

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!