Hummm...
Posso dire che e' una cosa un po' inutile? Io lascio il pc acceso per ore o giorni, coi file aperti così sono sempre a disposizione se mi viene un'idea. Volendo potrei mandare in sleep o in ibernazione il pc dopo N minuti /ore di inutilizzo.
E non e' nemmeno così facile da realizzare, se si vuole prendere in considerazione le ipotesi piu' frequenti.
Ma visto che vuoi sperimentare ecco la mia proposta:
-per cominciare riserva 1 cella di un tuo foglio per memorizzare l'orario di chiusura. Io ho usato Foglio2-Z1
-nel modulo Questa_cartella_di_lavoro del progetto vba del file in questione inserisci questo codice:
- Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Debug.Print Format(Now, "hh:mm:ss"), "Eseguo BeforeClose"
NextT = ThisWorkbook.Sheets("Foglio2").Range("Z1").Value
Application.OnTime NextT, "StartShDwn", , False
Debug.Print Format(Now, "hh:mm:ss"), "Deschedulato StartShDwn delle " & Format(NextT, "hh:mm:ss")
On Error GoTo 0
End Sub
Private Sub Workbook_Open()
'Stop
NextT = Date + TimeValue("21:00:00")
Debug.Print Format(Now, "hh:mm:ss"), "Eseguo Workb_Open", NextT
If NextT > Now Then
ThisWorkbook.Sheets("Foglio2").Range("Z1").Value = NextT
Debug.Print Format(Now, "hh:mm:ss"), "Schedulo StartShDwn per le " & Format(NextT, "hh:mm:ss")
Application.OnTime NextT, "StartShDwn", NextT + TimeValue("0:00:50")
Else
On Error Resume Next
NextT = ThisWorkbook.Sheets("Foglio2").Range("Z1").Value
Application.OnTime NextT, "StartShDwn", , False
On Error GoTo 0
End If
End Sub
In un Modulo standard inserisci:
- Codice: Seleziona tutto
Public PostP As Boolean, NextT
Sub StartShDwn()
Debug.Print Format(Now, "hh:mm:ss"), "Eseguo StartShDwn"
Unload UserForm1
'On Error Resume Next
UserForm1.Show
'On Error GoTo 0
End Sub
Sub ChiudiUF()
Debug.Print Format(Now, "hh:mm:ss"), "Eseguo ChiudiUF"
Unload UserForm1
If PostP = True Then
NextT = Now + TimeValue("0:30:00")
ThisWorkbook.Sheets("Foglio2").Range("Z1").Value = NextT
Debug.Print Format(Now, "hh:mm:ss"), "ChiudiUF, attivo OnTime per le " & Format(NextT, "hh:mm:ss")
Application.OnTime NextT, "StartShDwn"
Else
Debug.Print Format(Now, "hh:mm:ss"), "ChiudiUF, chiudo file"
ThisWorkbook.Save
ThisWorkbook.Close False
End If
End Sub
Poiche' ho voluto inserire un messaggio per avvertire che il file sta per essere chiuso, ed eventualmente rinviare la chiusura, ho aggiunto una "userform". La "descrizione" della userform e' contenuta in questi due file:
https://www.dropbox.com/s/m5n6t36lsq71w ... 1.frm?dl=0https://www.dropbox.com/s/wsydsa5fknmsa ... 1.frx?dl=0Scarica i file sul tuo disco; poi val sul vba e importa il file NIMA_UserForm1.frm:
-Menu /File /Importa file; scegli NIMA_UserForm1.frm e conferma con "Apri"
A questo punto salvi il tuo file.
Quando lo aprirai, la Sub Workbook_Open impostera' l'ora di chiusura per le 21:00 del giorno, ma solo se il file viene aperto prima delle 21.
Se il file viene chiuso prima delle 21, il controllo delle 21 viene annullato.
Alle 21 una form comparira' avvertendo della prossima chiusura del file; un pulsante consente a chi eventualmente sta lavorando sul file di rinviare la chiusura di 30minuti; altrimenti allo scadere di un timeout di 30 secondi il file verra' salvato e chiuso.
Questo e' quanto...
Lo puoi collaudare con calma tutte le sere alle 21