Es justo lo que pensaba... además de agregar una macro había que modificar un poco la que había...
En la primera macro (la que está en ThisWorkbook), cambia
'Contador para cerrar
Application. OnTime Now + TimeValue("00:05:00"), "cerrar"
por
'Llamada a macro que programa cierre
Call activa
y hay que agregar, varias cosas en el módulo normal:
' Con esta línea la contraseña no diferencia mayúsculas y minúsculas
Option Compare Text ' PUEDE BORRARSE SI DESEAS QUE SI DIFERENCIE
Public tiempoCierre As Date ' LINEA AGREGADA
Sub cerrar()
'Cerrar el libro guardando cambios
ActiveWorkbook.Close SaveChanges:=True
End Sub
' programa (activa) el evento de cierre
Sub activa()
tiempoCierre = Now + TimeValue("00:00:30") ' LINEA AGREGADA
Application.OnTime EarliestTime:=tiempoCierre, procedure:="cerrar" ' LINEA MODIFICADA
End Sub
' macro que cancela el evento de cierre
Sub cancela()
Dim pword As String, rpta
Dim titulo As String, mensaje As String
pword = "clave777" ' AQUI PROGRAMAR LA CONTRASEÑA
' SOLICITAR EL INGRESO DE LA CONTRASEÑA
titulo = "CONFIRMACIÓN"
mensaje = "Para mantener el archivo abierto ingrese la contraseña adecuada"
rpta = InputBox(prompt:=mensaje, Title:=titulo)
' VALIDAR LA CONTRASEÑA Y DAR MENSAJE
titulo = "AVISO"
If rpta = pword Then
mensaje = "La contraseña es correcta. El archivo permanecerá abierto."
' CANCELAR EL EVENTO
Application.OnTime EarliestTime:=tiempoCierre, procedure:="cerrar", schedule:=False
Else
mensaje = "La contraseña es incorrecta. El archivo se cerrará en breve."
End If
MsgBox prompt:=mensaje, Title:=titulo, Buttons:=vbInformation
End Sub
La macro cancela la tienes que asociar a un botón...
En la pestaña Desarrollador (o Programador dependiendo de tu versión de Excel), selecciona
Insertar... y luego el primer ícono, dibuja el botón y cuando te pida asociar a una macro, eliges cancela