¿Cómo saber si alguien desprotege una hoja EXCEL?
Hola Abraham, hace unos días hice esta pregunta y fuiste de gran ayuda con tu respuesta de utilizar un procedimiento que utilizara la función Intersect (para los rangos protegidos) en el evento Worksheet_Change. Sin embargo días después se me ocurrió una buena solución que me gustaría compartirte:
La idea radica en que cuando la hoja está protegida con mi clave, si por medio de mi código intento desproteger la hoja con el método Unprotect dando como Passord una clave que no es la correcta, se producirá un error, lo cual no pasará si la hoja está desprotegida ya que el método Unprotect no realiza ninguna acción en este caso. Entonces con un procedimiento de la siguiente forma puedo registrar en una celda de nombre "desprotegida" que en principio está en FALSO el momento en que el usuario desprotege la hoja:
Private Sub desproteger()
On Error GoTo salir
planilla.Unprotect Password:=""
Range("desprotegida").Value = True
salir:
End Sub
y en el evento Worksheet_SelectionChange:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call desproteger
End Sub
Por otra parte me gustaría que me ayudaras nuevamente con el tema de impedir que el usuario inhabilite los macros mediante el botón "Modo de Diseño", ya que la soución que me diste no se puede implementar en EXCEL 2007. Se que debe hacerse diferente ya que en 2007 se debe utilizar el "Ribbon" y código en XML pero la verdad no se como hacerlo. ¿Me puedes echar una mano?
Gracias nuevamente.
La idea radica en que cuando la hoja está protegida con mi clave, si por medio de mi código intento desproteger la hoja con el método Unprotect dando como Passord una clave que no es la correcta, se producirá un error, lo cual no pasará si la hoja está desprotegida ya que el método Unprotect no realiza ninguna acción en este caso. Entonces con un procedimiento de la siguiente forma puedo registrar en una celda de nombre "desprotegida" que en principio está en FALSO el momento en que el usuario desprotege la hoja:
Private Sub desproteger()
On Error GoTo salir
planilla.Unprotect Password:=""
Range("desprotegida").Value = True
salir:
End Sub
y en el evento Worksheet_SelectionChange:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call desproteger
End Sub
Por otra parte me gustaría que me ayudaras nuevamente con el tema de impedir que el usuario inhabilite los macros mediante el botón "Modo de Diseño", ya que la soución que me diste no se puede implementar en EXCEL 2007. Se que debe hacerse diferente ya que en 2007 se debe utilizar el "Ribbon" y código en XML pero la verdad no se como hacerlo. ¿Me puedes echar una mano?
Gracias nuevamente.
Respuesta de Abraham Valencia
1