Cómo cerrar el libro tras un tiempo determinado
Solución: Puede usar VBA para configurar un temporizador con Application.OnTime que cierre automáticamente el libro tras una duración determinada. Esta es una forma eficaz de imponer límites de prueba.
Combine esto con las opciones de seguridad de XLS Padlock para prohibir el acceso al editor de VBA y compile su código VBA para impedir que los usuarios desactiven el temporizador.
Implementación
Section titled “Implementación”Inserte el siguiente código en el módulo ThisWorkbook de su proyecto VBA.
' --- In ThisWorkbook module ---
' Variable to store the scheduled time for the timerPrivate mScheduledTime As Date
' This procedure will be called by the timer to close the workbookPublic Sub CloseAndSave() ' Save any changes and close the workbook ThisWorkbook.Close SaveChanges:=TrueEnd Sub
' This event runs when the workbook is opened, starting the timerPrivate 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.", vbInformationEnd Sub
' This event runs just before the workbook closesPrivate 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:=FalseEnd SubCómo funciona
Section titled “Cómo funciona”Workbook_Open: Cuando se inicia la aplicación, este evento programa la macroCloseAndSavepara que se ejecute al cabo de 8 horas (TimeValue("08:00:00")). Puede ajustar esta duración según sus necesidades (por ejemplo,TimeValue("01:00:00")para una hora).CloseAndSave: Esta es la macro que realiza la acción. Guarda el libro y luego lo cierra.Workbook_BeforeClose: Este es un paso de limpieza crucial. Si el usuario cierra el libro manualmente, este código cancela el temporizador pendiente, lo que evita que Excel intente ejecutar una macro en un libro que ya no está abierto, lo que provocaría un error.