VBA Proteger / Desproteger Hojas de Trabajo
In this Article
Este tutorial le enseñará todo sobre la protección de hojas de trabajo de Excel en VBA– Cómo proteger o desproteger hojas de trabajo en Excel.
Desproteger una hoja de trabajo de Excel sin contraseña
Para desproteger una Hoja de Trabajo que no está protegida por contraseña utilice esta simple línea de código:
Worksheets("Hoja1").Unprotect
Desproteger hoja de cálculo de Excel con contraseña
Para desproteger una Hoja de Trabajo que está protegida por contraseña, también debes introducir la contraseña:
Worksheets("Hoja1").Unprotect "Contraseña"
Desproteger Hoja – Contraseña perdida
Para desproteger una Hoja de Trabajo sin conocer la contraseña, debe utilizar un complemento de recuperación de contraseña.
Proteger Hojas de Trabajo
La protección de hojas de trabajo le permite bloquear ciertos aspectos de la hoja para que no se puedan editar.
Este menú se encuentra en Revisar > Proteger > Proteger hoja o haciendo clic con el botón derecho del ratón en el nombre de la pestaña Hoja:
Lo más habitual es que se utilice para proteger las celdas «Bloqueadas» de la edición, permitiendo sólo al usuario final la edición de determinadas celdas. Puede bloquear celdas seleccionándolas y abriendo la pestaña Proteger del menú Formato de celdas (CTRL + 1).
También puede evitar que el usuario cambie la estructura de la hoja de trabajo (insertar, eliminar o cambiar el tamaño de Filas y Columnas), o que interactúe con los Autofiltros, y mucho más.
Proteger la Hoja de Trabajo – Sin Contraseña
Es posible que desee proteger una Hoja de Trabajo sin introducir una contraseña. Esto evitará que se realicen cambios accidentales en la hoja de trabajo, a la vez que dará al usuario acceso para realizar cambios si lo desea.
Worksheets("Hoja1").Protect
Proteger hoja de trabajo – Proteger con contraseña
Worksheets("Hoja1").Protect "Contraseña"
Proteger la configuración de la hoja de trabajo
Los ejemplos anteriores protegerán las hojas de trabajo con la configuración de protección estándar. En cambio, es posible que desee personalizar lo que se protege:
Sub proteger()
Worksheets("Hoja1").Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _
AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False
End Sub
En lugar de utilizar la sintaxis anterior, recomiendo grabar una macro con la configuración deseada (elegida con el menú de protección de la hoja de cálculo anterior) y copiar y pegar el código grabado en su procedimiento.
Proteger la hoja – Permitir que VBA haga cambios
Por defecto, cuando se protege una hoja, la protección se aplica a las operaciones de VBA además de las acciones del usuario. Si VBA intenta modificar una celda bloqueada, verá un error de ejecución 1004. Para evitar esto, puede desproteger y volver a proteger sus hojas de trabajo siempre que VBA necesite interactuar con ellas:
Sub Editar_hoja1()
'desproteger Hoja1
Worksheets("Hoja1").Unprotect
'hacer algo con la Hoja1
'Volver a proteger la Hoja1
Worksheets("Hoja1").Protect
End Sub
Sin embargo, es fácil olvidar desproteger y/o volver a proteger las hojas de trabajo. Esto puede aumentar la probabilidad de un error de codificación. En su lugar, puede utilizar la configuración UserInterFaceOnly. Cuando es TRUE, las hojas de trabajo sólo estarán protegidas de los usuarios, NO de VBA. Su código VBA será libre de editar la hoja de trabajo como si estuviera desbloqueada. Dos puntos importantes sobre UserInterFaceOnly:
- Esta configuración no está disponible en el menú Protección de la hoja de cálculo (mostrado arriba). Es una configuración que debe ser definida en VBA.
- La configuración no se guarda cuando se cierra un libro de trabajo. Debe ser redefinida cada vez que se abre un libro.
Así que para establecer la propiedad UserInterFaceOnly, debe colocar el siguiente procedimiento de evento Workbook_Open en el módulo ThisWorkbook:
Private Sub Workbook_Open()
Dim hoja As Worksheet
For Each ws hoja ThisWorkbook.Worksheets
hoja.Protect UserInterfaceOnly:=True
Next hoja
End Sub
Workbook_Open es un procedimiento de evento especial que se ejecutará cada vez que se abra el libro de trabajo. Debe colocarse en el módulo ThisWorkbook. Alternativamente, puede utilizar el procedimiento de evento Auto_Open (no cubierto aquí).
Macro para Desproteger Todas las Hojas
Esta macro desprotegerá todas las hojas de un libro de trabajo:
' Desproteger todas las hojas de trabajo
Sub DesprotegerTodasLasHojas()
Dim hoja As Worksheet
For Each hoja In Worksheets
hoja.Unprotect "contraseña"
Next hoja
End Sub
Macro para proteger todas las hojas
Esta macro protegerá todas las hojas de un libro de trabajo:
' Proteger todas las hojas de trabajo
Sub ProtegerTodasLasHojas()
Dim hoja As Worksheet
For Each hoja In Worksheets
hoja.Protect "contraseña"
Next hoja
End Sub