2 maneras de modificar celdas protegidas en Excel, con macros
Como sabemos, cuando queremos proteger una hoja de cálculo en Excel usamos el comando Revisar > Proteger hoja. Este comando nos dará la opción de elegir las acciones que queremos sí pueda realizar un usuario aunque la hoja esté protegida.
Figura 1. Proteger hoja de cálculo con opciones de modificación.
Pero qué pasa cuando tenemos un archivo el cual deseamos que sólo se modifique mediante macros. Para tal acción tenemos dos maneras de modificar las celdas; ambas son mediante macros.
Ver video tutorial
Modificar celdas protegiendo y desprotegiendo
La manera habitual de modificar celdas usando macros es primeramente protegiendo la hoja mediante macro asignando una contraseña. Como lo vemos en la siguiente macro.
Sub Proteger() 'Protegemos la hoja de manera normal ActiveSheet.Protect Password:="hola" End Sub
También tenemos una macro para desproteger la hoja.
Sub DesProteger() 'Desprotegemos la hoja de manera normal ActiveSheet.Unprotect Password:="hola" End Sub
Y para modificar celdas usamos una macro que primero manda llamar a la macro Desproteger, luego hace las modificaciones necesarias y al final manda a llamar a la macro Proteger.
Sub ModificarCeldasProtegiendo() 'Modificar celdas bloqueadas primero desprotegiendo y luego protegiendo 'Mandamos llamar a la macro DesProteger Call DesProteger 'Se hacen las modificaciones ActiveSheet.Range("B1").Value = 6 '... 'Mandamos llamar a la macro Proteger Call Proteger End Sub
Modificar celdas sin desprotegerlas
Figura 2. Modificar celdas en Excel con macro sin desprotegerlas.
La manera “ideal” de modificar celdas mediante macros es usando el mismo método Protect, pero usando un parámetro que nos permitirá proteger la hoja, pero sólo la parte de la interface del usuario, permitiendo hacer modificaciones libremente mediante macros. Usaremos el parámetro UserInterfaceOnly.
Sub ProtegerSoloInterfaceUsuario() 'Proteger la hoja sólo en la interface del usuario 'y permitiendo modificar celdas desde VBA ActiveSheet.Protect Password:="hola", UserInterfaceOnly:=False End Sub
Ahora bien, usando la macro anterior ya no será necesario proteger y desproteger las celdas cada vez que se requiera modificar.
Sub ModificarSinDesprotegerlas() 'Modificando celdas usando previamente UserInterfaceOnly:=True 'Se hacen las modificaciones ActiveSheet.Range("B1").Value = 7 '... End Sub
Descarga el archivo de ejemplo
Descarga las macros usadas en este ejemplo: Modificar celdas protegidas.rar