VBA protege y desprotege hojas (más de 25 ejemplos)
- Adaptando el código para sus propósitos
- Proteger y desproteger: ejemplos básicos
- Proteger y desproteger con contraseña
- Aplicar protección a diferentes partes de la hoja de trabajo.
- Aplicar protección a varias hojas
- Comprobar si una hoja de trabajo está protegida
- Cambiar el estado bloqueado o desbloqueado de celdas, objetos y escenarios
- Permitir que se realicen acciones incluso cuando esté protegido
- Permitir que el código VBA realice cambios, incluso cuando está protegido
- Permitir el uso de la función Agrupar y Desagrupar
- 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.
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.
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