VBA protege y desprotege hojas (más de 25 ejemplos)

Índice
  1. Adaptando el código para sus propósitos
  2. Proteger y desproteger: ejemplos básicos
    1. Proteger una hoja sin contraseña
    2. Desproteger una hoja (sin contraseña)
  3. Proteger y desproteger con contraseña
    1. VBA Proteger hoja con contraseña
    2. VBA Desproteger hoja con contraseña
    3. Usar una contraseña basada en la entrada del usuario
    4. Detectar errores cuando se ingresa una contraseña incorrecta
  4. Aplicar protección a diferentes partes de la hoja de trabajo.
    1. Proteger contenidos
    2. Proteger objetos
    3. Proteger escenarios
    4. Proteger contenidos, objetos y escenarios
  5. Aplicar protección a varias hojas
    1. Proteger todas las hojas de trabajo en el libro activo
    2. Proteger las hojas seleccionadas en el libro activo.
    3. Desproteger todas las hojas del libro activo
  6. Comprobar si una hoja de trabajo está protegida
    1. Compruebe si el contenido de la hoja está protegido
    2. Compruebe si los objetos de la hoja están protegidos
    3. Compruebe si los escenarios de Sheet están protegidos
  7. Cambiar el estado bloqueado o desbloqueado de celdas, objetos y escenarios
    1. bloquear una celda
    2. Bloquear todas las celdas
    3. Bloquear un gráfico
    4. Bloquear una forma
    5. Bloquear un escenario
  8. Permitir que se realicen acciones incluso cuando esté protegido
    1. Permitir acciones de hoja cuando esté protegida
    2. Permitir la selección de cualquier celda
    3. Permitir la selección de celdas desbloqueadas
    4. No permitir la selección de ninguna celda
  9. Permitir que el código VBA realice cambios, incluso cuando está protegido
  10. Permitir el uso de la función Agrupar y Desagrupar
  11. Conclusión

Proteger y desproteger hojas es una acción común para un usuario de Excel. No hay nada peor que cuando alguien, que no sabe lo que está haciendo, sobrescribe fórmulas esenciales y valores de celda. Es aún peor cuando esa persona somos nosotros; todo lo que se necesita es presionar una tecla accidentalmente y, de repente, toda la hoja de trabajo se llena de errores. En esta publicación, exploramos el uso de VBA para proteger y desproteger hojas.

La protección no es infalible, pero evita la alteración accidental por parte de un usuario inconsciente.

La protección de láminas es particularmente frustrante ya que debe aplicarse una hoja a la vez. Si solo necesitamos proteger una hoja, está bien. Pero si tenemos más de 5 hojas, llevará un tiempo. Por eso Mucha gente recurre a una solución VBA.

Los fragmentos de código VBA a continuación muestran cómo realizar la mayoría de las actividades relacionadas con la protección y desprotección de hojas.

Tabla de contenido
  • Adaptando el código para sus propósitos
  • Proteger y desproteger: ejemplos básicos
    • Proteger una hoja sin contraseña
    • Desproteger una hoja (sin contraseña)
  • Proteger y desproteger con contraseña
    • VBA Proteger hoja con contraseña
    • VBA Desproteger hoja con contraseña
    • Usar una contraseña basada en la entrada del usuario
    • Detectar errores cuando se ingresa una contraseña incorrecta
  • Aplicar protección a diferentes partes de la hoja de trabajo.
    • Proteger contenidos
    • Proteger objetos
    • Proteger escenarios
    • Proteger contenidos, objetos y escenarios
  • Aplicar protección a varias hojas
    • Proteger todas las hojas de trabajo en el libro activo
    • Proteger las hojas seleccionadas en el libro activo.
    • Desproteger todas las hojas del libro activo
  • Comprobar si una hoja de trabajo está protegida
    • Compruebe si el contenido de la hoja está protegido
    • Compruebe si los objetos de la hoja están protegidos
    • Compruebe si los escenarios de Sheet están protegidos
  • Cambiar el estado bloqueado o desbloqueado de celdas, objetos y escenarios
    • bloquear una celda
    • Bloquear todas las celdas
    • Bloquear un gráfico
    • Bloquear una forma
    • Bloquear un escenario
  • Permitir que se realicen acciones incluso cuando esté protegido
    • Permitir acciones de hoja cuando esté protegida
    • Permitir la selección de cualquier celda
    • Permitir la selección de celdas desbloqueadas
    • No permitir la selección de ninguna celda
  • Permitir que el código VBA realice cambios, incluso cuando está protegido
  • Permitir el uso de la función Agrupar y Desagrupar
  • Conclusión

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombre del archivo: 0016 VBA Proteger y Desproteger Hojas.zip

Tener acceso

Adaptando el código para sus propósitos

A menos que se indique lo contrario, cada ejemplo siguiente se basa en una hoja de trabajo específica. Cada código incluye Hojas ("Hoja1"). , esto significa que la acción se aplicará a esa hoja específica. Por ejemplo, lo siguiente protege la Hoja1.

Sheets("Sheet1").Protect

Pero hay muchas maneras de hacer referencia a las hojas para protegerlas o desprotegerlas. Por lo tanto, podemos cambiar la sintaxis para utilizar uno de los métodos que se muestran a continuación.

Usando la hoja activa

La hoja activa es cualquier hoja que se esté utilizando actualmente dentro de la ventana de Excel.

ActiveSheet.Protect

Aplicar una hoja a una variable

Si queremos aplicar protección a una hoja almacenada como variable, podríamos usar lo siguiente.

Dim ws As WorksheetSet ws = Sheets("Sheet1")ws.Protect

Más adelante en la publicación, veremos ejemplos de código para recorrer cada hoja y aplicar protección rápidamente.

Proteger y desproteger: ejemplos básicos

Comencemos con algunos ejemplos sencillos para proteger y desproteger hojas en Excel.

Proteger una hoja sin contraseña

Sub ProtectSheet()'Protect a worksheetSheets("Sheet1").ProtectEnd Sub

Desproteger una hoja (sin contraseña)

Sub UnProtectSheet()'Unprotect a worksheetSheets("Sheet1").UnprotectEnd Sub

Proteger y desproteger con contraseña

Agregar una contraseña para brindar una capa adicional de protección es bastante fácil con VBA. La contraseña en estos ejemplos está codificada en la macro; Puede que esto no sea lo mejor para su escenario. Puede que sea mejor aplicar usando una variable de cadena o capturando contraseñas de usuario con un InputBox.

VBA Proteger hoja con contraseña

Sub ProtectSheetWithPassword()'Protect worksheet with a passwordSheets("Sheet1").Protect Password:="myPassword"End Sub

VBA Desproteger hoja con contraseña

Sub UnProtectSheetWithPassword()'Unprotect a worksheet with a passwordSheets("Sheet1").Unprotect Password:="myPassword"End Sub

NOTA: No es necesario desproteger y luego volver a proteger una hoja para cambiar la configuración. En su lugar, simplemente protéjala nuevamente con la nueva configuración.

Usar una contraseña basada en la entrada del usuario

El uso de una contraseña incluida en el código puede anular en parte el beneficio de tener una contraseña. Por lo tanto, los códigos de esta sección proporcionan ejemplos del uso de VBA para proteger y desproteger según la entrada del usuario. En ambos escenarios, hacer clic en Cancelar equivale a no ingresar ninguna contraseña.

Proteger con una contraseña ingresada por el usuario

Sub ProtectSheetWithPasswordFromUser()'Protect worksheet with a passwordSheets("Sheet1").Protect Password:=InputBox("Enter a protection password:")End Sub

Desproteger con una contraseña ingresada por el usuario

Sub UnProtectSheetWithPasswordFromUser()'Protect worksheet with a passwordSheets("Sheet1").Unprotect _    Password:=InputBox("Enter a protection password:")End Sub

Detectar errores cuando se ingresa una contraseña incorrecta

Si se proporciona una contraseña incorrecta, se muestra el siguiente mensaje de error.

VBA para proteger y desproteger hojas - Contraseña incorrecta

El siguiente código detecta el error y proporciona un mensaje personalizado.

Sub CatchErrorForWrongPassword()'Keep going even if error foundOn Error Resume Next'Apply the wrong passwordSheets("Sheet1").Unprotect Password:="incorrectPassword"'Check if an error has occuredIf Err.Number  0 Then    MsgBox "The Password Provided is incorrect"    Exit SubEnd If'Reset to show normal error messagesOn Error GoTo 0End Sub

Si olvidas una contraseña, no te preocupes, la protección es fácil de eliminar .

Aplicar protección a diferentes partes de la hoja de trabajo.

VBA brinda la capacidad de proteger 3 aspectos de la hoja de trabajo:

  • Contenido: lo que ves en la cuadrícula
  • Objetos: las formas y gráficos que se encuentran en la cara de la cuadrícula.
  • Escenarios: los escenarios contenidos en la sección Análisis What If de la cinta

De forma predeterminada, la función de protección estándar aplicará los tres tipos de protección al mismo tiempo. Sin embargo, podemos ser específicos sobre qué elementos de la hoja de trabajo están protegidos.

Proteger contenidos

Sub ProtectSheetContents()'Apply worksheet contents protection onlySheets("Sheet1").Protect Password:="myPassword", _    DrawingObjects:=False, _    Contents:=True, _    Scenarios:=FalseEnd Sub

Proteger objetos

Sub ProtectSheetObjects()'Apply worksheet objects protection onlySheets("Sheet1").Protect Password:="myPassword", _    DrawingObjects:=True, _    Contents:=False, _    Scenarios:=FalseEnd Sub

Proteger escenarios

Sub ProtectSheetScenarios()'Apply worksheet scenario protection onlySheets("Sheet1").Protect Password:="myPassword", _    DrawingObjects:=False, _    Contents:=False, _    Scenarios:=TrueEnd Sub

Proteger contenidos, objetos y escenarios

Sub ProtectSheetAll()'Apply worksheet protection to contents, objects and scenariosSheets("Sheet1").Protect Password:="myPassword", _    DrawingObjects:=True, _    Contents:=True, _    Scenarios:=TrueEnd Sub

Aplicar protección a varias hojas

Como hemos visto, la protección se aplica una hoja a la vez. Por lo tanto, el bucle es una excelente manera de aplicar configuraciones a muchas hojas rápidamente. Los ejemplos de esta sección no se aplican solo a la Hoja 1, como lo hicieron los ejemplos anteriores, pero incluya todas las hojas de trabajo o todas las hojas de trabajo seleccionadas.

Proteger todas las hojas de trabajo en el libro activo

Sub ProtectAllWorksheets()'Create a variable to hold worksheetsDim ws As Worksheet'Loop through each worksheet in the active workbookFor Each ws In ActiveWorkbook.Worksheets    'Protect each worksheet    ws.Protect Password:="myPassword"Next wsEnd Sub

Proteger las hojas seleccionadas en el libro activo.

Sub ProtectSelectedWorksheets()Dim ws As WorksheetDim sheetArray As Variant'Capture the selected sheetsSet sheetArray = ActiveWindow.SelectedSheets'Loop through each worksheet in the active workbookFor Each ws In sheetArray    On Error Resume Next    'Select the worksheet    ws.Select    'Protect each worksheet    ws.Protect Password:="myPassword"    On Error GoTo 0Next wssheetArray.SelectEnd Sub

Desproteger todas las hojas del libro activo

Sub UnprotectAllWorksheets()'Create a variable to hold worksheetsDim ws As Worksheet'Loop through each worksheet in the active workbookFor Each ws In ActiveWorkbook.Worksheets'Unprotect each worksheetws.Unprotect Password:="myPassword"Next wsEnd Sub

Comprobar si una hoja de trabajo está protegida

Los códigos de esta sección comprueban si se ha aplicado cada tipo de protección.

Compruebe si el contenido de la hoja está protegido

Sub CheckIfSheetContentsProtected()'Check if worksheets contents is protectedIf Sheets("Sheet1").ProtectContents Then MsgBox "Protected Contents"End Sub

Compruebe si los objetos de la hoja están protegidos

Sub CheckIfSheetObjectsProtected()'Check if worksheet objects are protectedIf Sheets("Sheet1").ProtectDrawingObjects Then MsgBox "Protected Objects"End Sub

Compruebe si los escenarios de Sheet están protegidos

Sub CheckIfSheetScenariosProtected()'Check if worksheet scenarios are protectedIf Sheets("Sheet1").ProtectScenarios Then MsgBox "Protected Scenarios"End Sub

Cambiar el estado bloqueado o desbloqueado de celdas, objetos y escenarios

Cuando una hoja está protegida, los elementos desbloqueados aún se pueden editar. Los siguientes códigos demuestran cómo bloquear y desbloquear rangos, celdas, gráficos, formas y escenarios.

Cuando la hoja está desprotegida, la configuración de bloqueo no tiene ningún impacto. Cada objeto queda bloqueado bajo protección.

Todos los ejemplos de esta sección configuran cada objeto/elemento para que se bloquee cuando esté protegido. Para establecerlo como desbloqueado, cambie el valor a False .

bloquear una celda

Sub LockACell()'Changing the options to lock or unlock cellsSheets("Sheet1").Range("A1").Locked = TrueEnd Sub

Bloquear todas las celdas

Sub LockAllCells()'Changing the options to lock or unlock cells all cellsSheets("Sheet1").Cells.Locked = TrueEnd Sub

Bloquear un gráfico

Sub LockAChart()'Changing the options to lock or unlock chartsSheets("Sheet1").ChartObjects("Chart 1").Locked = TrueEnd Sub

Bloquear una forma

Sub LockAShape()'Changing the option to lock or unlock shapesSheets("Sheet1").Shapes("Rectangle 1").Locked = TrueEnd Sub

Bloquear un escenario

Sub LockAScenario()'Changing the option to lock or unlock a scenarioSheets("Sheet1").Scenarios("scenarioName").Locked = TrueEnd Sub

Permitir que se realicen acciones incluso cuando esté protegido

Incluso estando protegido, podemos permitir operaciones específicas, como insertar filas, formatear celdas, ordenar, etc. Estas son las mismas opciones que encontramos al proteger manualmente la hoja.

Configuración de protección estándar

Permitir acciones de hoja cuando esté protegida

Sub AllowSheetActionsWhenProtected()'Allowing certain actions even if the worksheet is protectedSheets("Sheet1").Protect Password:="myPassword", _    DrawingObjects:=False, _    Contents:=True, _    Scenarios:=False, _    AllowFormattingCells:=True, _    AllowFormattingColumns:=True, _    AllowFormattingRows:=True, _    AllowInsertingColumns:=False, _    AllowInsertingRows:=False, _    AllowInsertingHyperlinks:=False, _    AllowDeletingColumns:=True, _    AllowDeletingRows:=True, _    AllowSorting:=False, _    AllowFiltering:=False, _    AllowUsingPivotTables:=FalseEnd Sub

Permitir la selección de cualquier celda

Sub AllowSelectionAnyCells()'Allowing selection of locked or unlocked cellsSheets("Sheet1").EnableSelection = xlNoRestrictionsEnd Sub

Permitir la selección de celdas desbloqueadas

Sub AllowSelectionUnlockedCells()'Allowing selection of unlocked cells onlySheets("Sheet1").EnableSelection = xlUnlockedCellsEnd Sub

No permitir la selección de ninguna celda

Sub NoSelectionAllowed()'Do not allow selection of any cellsSheets("Sheet1").EnableSelection = xlNoSelectionEnd Sub

Permitir que el código VBA realice cambios, incluso cuando está protegido

Incluso cuando estamos protegidos, todavía queremos que nuestras macros realicen cambios en la hoja. El siguiente código VBA cambia la configuración para permitir que las macros realicen cambios en una hoja protegida.

Sub AllowVBAChangesOnProtectedSheet()'Enable changes to worksheet by VBA code, even if protectedSheets("Sheet1").Protect Password:="myPassword", _    UserInterfaceOnly:=TrueEnd Sub

Lamentablemente, esta configuración no se guarda en el libro de trabajo. Debe ejecutarse cada vez que se abre el libro. Por lo tanto, llamar al código en el evento Workbook_Open del módulo Workbook es probablemente la mejor opción.

Permitir el uso de la función Agrupar y Desagrupar

Para permitir que los usuarios utilicen la función Agrupar y Desagrupar de hojas protegidas, debemos permitir cambios en la interfaz de usuario y habilitar el esquema.

Sub AllowGroupingAndUngroupOnProtectedSheet()'Allow user to group and ungroup whilst protectedSheets("Sheet1").Protect Password:="myPassword", _    UserInterfaceOnly:=TrueSheets("Sheets1").EnableOutlining = TrueEnd Sub

Como se indicó anteriormente, la configuración UserInterfaceOnly no se almacena en el libro de trabajo; por lo tanto, es necesario ejecutarlo cada vez que se abre el libro.

Conclusión

¡Guau! Fueron muchos ejemplos de código; Con suerte, esto cubre todo lo que necesitaría para usar VBA para proteger y desproteger hojas.

Artículos Relacionados:

  • Office Scripts: protección de la hoja de cálculo del libro de trabajo
  • Código VBA para proteger con contraseña un archivo de Excel
  • Código VBA para proteger y desproteger libros de trabajo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...