Proteger un libro en Excel con VBA es una tarea relativamente habitual para los que trabajamos con este tipo de archivos y con clientes frecuentemente.
Los motivos pueden ser varios:
- Proteger la copia de las celdas del archivo
- Evitar la modificación de ciertas celdas
- Evitar la modificación de las fórmulas
- Evitar que se modifique la estructura (añadir o quitar hojas) del libro
- …
Un un montón de motivos más tan variopintos que debería haber una web solo para listarlos.
El caso es que para proteger un libro de Excel el código que se necesita es muy breve.
Desarrollar el código
El código que a continuación se presenta está orientado sólo a proteger la estructura de un libro de Excel sin más.
[codesyntax lang=”vb” lines=”no” container=”pre” blockstate=”expanded” doclinks=”0″]
Sub Proteger() On Error GoTo fin ActiveWorkbook.Protect ("ExcelyVba") fin: End Sub
[/codesyntax]
Esta pequeña macro nos permite proteger el libro para que nadie pueda eliminar o crear hojas mediante la contraseña “ExcelyVBA” que si dejamos vacío también lo protegerá pero para desprotegerlo simpelmente habrá que ir al botón de Revisar >> Proteger Libro y hacer click sobre el mismo.
Código para proteger el libro y todas sus hojas
Este código es un pelín más complejo y requiere unas mínimas nociones de VBA. Para conocer este código necesitas saber de declaración de variables (ver más), un poco de el bucle For Each (ver más) y de propiedades de las hojas de un libro.
[codesyntax lang=”vb” lines=”no” container=”pre”]
Sub Proteger() On Error GoTo fin Dim sht As Worksheet Application.ScreenUpdating = False ActiveWorkbook.Protect ("ExcelyVBA") For Each sht In ActiveWorkbook.Worksheets If sht.Visible = True Then sht.Protect ("ExcelyVBA") End If Next fin: End Sub
[/codesyntax]
Como puede verse, sobre el código de proteger al libro hemos añadido unas poquitas líneas en las que usamos la propiedad Visible de cada hoja para discriminar las hojas que queremos proteger y luego añadimos la propiedad Protect a la hoja con una contraseña.