Gracias Pepe por la respuesta.
Ayer agarré el libro de Mauricio y me puse a revisar un poco, cambié algunas cosas que se adecuan a mi necesidad. Hice lo mismo que me comentas, si el usuario cierra la Aplicación o el Libro, antes de cerrar se protege y da la opcion de guardar o no los cambios, pero por más que no se guarden queda siempre protegido, el tema era ese que no se guarde sin protección.
Tambien asigne un código al inicio del Libro el cual, luego de 8 segundos de no haber hecho modificaciones, protege todas las Hojas y cierra el libro (ahí no me dio problemas el oDoc.close(true)), luego si realiza modificaciones le aparecera una ventana preguntando si necesita más tiempo para seguir editando y al aceptar dará 30 segundos más, y así hasta que seleccione "no", donde temina el bucle y Protege, guarda y cierra perfectamente el Libro sin errores. Todo un logro para un principiante como yo, igualmente comparto el código quizas a alguin le sirva, seguramente tiene muchas cosas para mejor así que bienvenidas las críticas constructiva.
Doy el tema como RESUELTO.
Código: Seleccionar todo
Const Clave = "1234"
Sub GuardaryProteger
dim oDoc as object, x as object
REM McFly ------------------------------------------------------------------------------
oDoc = ThisComponent
if oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
for each x in ThisComponent.Sheets()
x.Protect( clave )
next
msgbox "Se protegieron exitosamente todas las Hojas", 48, "Aviso de seguridad"
end if
end sub
sub Protegeraliniciar
dim oDoc as object, x as object
dim Confirmar as Integer
dim Confirmar2 as Integer
REM McFly ------------------------------------------------------------------------------
oDoc = ThisComponent
wait 6000
if oDoc.isModified()=false then
oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument")
for each x in ThisComponent.Sheets()
x.Protect( clave )
next
msgbox "Por inactividad se protegieron todas las Hojas", 48, "Aviso de seguridad"
msgbox "El documento se cerrará", 48, "Aviso de seguridad"
oDoc.close(true)
else
wait 20000 '20 segundos antes de iniciar
do
Confirmar = msgbox ("Ha pasado mucho tiempo, continuar editando??", 32 + 4, "Confirmar")
Select Case Confirmar
Case 6 'Si presiona SI
msgbox "Puedes continuar editando por 30 segundos más", 64, "Aviso"
wait 30000
Case 7 'Si presiona NO
wait 300
if oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then 'Proteger Hojas
for each x in ThisComponent.Sheets()
x.Protect( clave )
next
msgbox "Se guardaron todas las modificaciones y" & chr(13) & "se protegieron exitosamente todas las Hojas", 48, "Aviso de seguridad"
oDoc.store() 'Guardar
wait 500 '0,5 segundos para que guarde
msgbox "El documento se cerrará", 48, "Aviso de seguridad"
oDoc.close(true)
else
msgbox "Sin modificaciones"
end if
end Select
loop while Confirmar = "6" 'termina el bucle si se preciona NO
exit sub
end if
end sub