VBA Proteger / Desproteger Hojas de Trabajo

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on marzo 2, 2022

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.

Pantalla Proteger Hojas

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:

Pantalla Proteger Hojas Clic Derecho

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).

Proteger Celdas Menu Formato Celdas

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
vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples