Salta ai contenuti

Come chiudere la cartella di lavoro dopo un determinato periodo di tempo

Soluzione: è possibile utilizzare VBA per impostare un timer con Application.OnTime che chiude automaticamente la cartella di lavoro dopo una durata specificata. Questo è un modo efficace per far rispettare i limiti della versione di prova.

Combinare questo con le opzioni di sicurezza di XLS Padlock per vietare l’accesso all’editor VBA e compilare il codice VBA, in modo da impedire agli utenti di disattivare il timer.

Inserire il codice seguente nel modulo ThisWorkbook del progetto VBA.

' --- In ThisWorkbook module ---
' Variable to store the scheduled time for the timer
Private mScheduledTime As Date
' This procedure will be called by the timer to close the workbook
Public Sub CloseAndSave()
' Save any changes and close the workbook
ThisWorkbook.Close SaveChanges:=True
End Sub
' This event runs when the workbook is opened, starting the timer
Private Sub Workbook_Open()
' Set the timer to run the "CloseAndSave" procedure in 8 hours.
' You can change the time value as needed.
mScheduledTime = Now + TimeValue("08:00:00")
Application.OnTime EarliestTime:=mScheduledTime, Procedure:="ThisWorkbook.CloseAndSave"
' Optional: Inform the user that the application will close automatically.
' MsgBox "This application will automatically close in 8 hours.", vbInformation
End Sub
' This event runs just before the workbook closes
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Cancel the scheduled OnTime event to prevent errors if the user
' closes the workbook manually before the timer runs.
On Error Resume Next
Application.OnTime EarliestTime:=mScheduledTime, Procedure:="ThisWorkbook.CloseAndSave", Schedule:=False
End Sub
  1. Workbook_Open: all’avvio dell’applicazione, questo evento pianifica l’esecuzione della macro CloseAndSave dopo 8 ore (TimeValue("08:00:00")). È possibile regolare questa durata in base alle proprie esigenze (ad esempio, TimeValue("01:00:00") per un’ora).
  2. CloseAndSave: è la macro che esegue l’azione. Salva la cartella di lavoro e poi la chiude.
  3. Workbook_BeforeClose: è un passaggio di pulizia essenziale. Se l’utente chiude la cartella di lavoro manualmente, questo codice annulla il timer in attesa, impedendo a Excel di tentare di eseguire una macro su una cartella di lavoro che non è più aperta, cosa che provocherebbe un errore.