lunes, 19 de mayo de 2014

VBA: Comprobar si una hoja está o no protegida.

Hoy veremos una pequeña utilidad con la instrucción .ProtectContents, que detecta si la Hoja está o no protegida...

Para completar un poco este método tan sencillo, tomaremos algunas acciones según la respuesta a la pregunta:
1 mostraremos un Mensaje advirtiendo de la situación
2 cambiaremos el color de fondo de la celda B1
3 cambiaremos el color de la pestaña de la hoja

Todo lo asociaremos al evento _Activate de la hoja de trabajo.


Por tanto, en la ventana de código de la hoja que nos interese... asociándolo a un evento _Activate, es decir, cuando activemos la hoja de trabajo (en mi ejemplo la Hoja1):

Private Sub Worksheet_Activate()
'comprobamos si la hoja en cuestión tiene activado la protección
If Hoja1.ProtectContents = True Then
    'en caso afirmativo (está protetida)
    
    'desprotegemos la hoja para realizar las acciones siguientes
    Hoja1.Unprotect
    'la celda B1 la ponemos de color Rojo
    'y cambiamos el color de la pestaña de la hoja a Rojo
    Hoja1.Range("B1").Interior.color = vbRed
    Hoja1.Tab.color = vbRed
    'marcamos un mensaje
    MsgBox "La Hoja está Protegida."
    'finalizamos dejando la hoja protegida.. como estaba
    Hoja1.Protect
Else
    'en caso afirmativo (está desprotegida)
    'la celda B1 la ponemos de color Verde
    'y cambiamos el color de la pestaña de la hoja a Verde
    Hoja1.Range("B1").Interior.color = vbGreen
    Hoja1.Tab.color = vbGreen
    'marcamos un mensaje
    MsgBox "La hoja está Desprotegida."
End If
End Sub



Podemos comprobar cómo al activar (entrar) en la Hoja1, se dispara el evento y en consecuencia el control con .ProtectContents:

VBA: Comprobar si una hoja está o no protegida.


O bien..

VBA: Comprobar si una hoja está o no protegida.

2 comentarios:

  1. Hola también podemos saber si un libro está protegido o no? Agradezco tu respuesta.

    ResponderEliminar
    Respuestas
    1. Hola David,
      si, claro, es posible con un código similar:

      Sub Test_Workbook_Protection()

      If ActiveWorkbook.ProtectStructure Then
      msgbox "libro protegido"
      else
      msgbox "no protegido"
      end if

      End Sub


      Saludos

      Eliminar