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 hoja de cálculo de Excel sin contraseña
Para desproteger una hoja de trabajo que no está protegida con contraseña, use esta simple línea de código:
1 | Hojas de trabajo ("Hoja1"). Desproteger |
Desproteger hoja de cálculo de Excel con contraseña
Para desproteger una hoja de trabajo que está protegida con contraseña, también debe ingresar la contraseña:
1 | Hojas de trabajo ("Hoja1"). Desproteger "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 la hoja de trabajo le permite bloquear ciertos aspectos de la hoja para que no se puedan editar.
Este menú se encuentra en Inicio> Formato> Proteger hoja o haciendo clic con el botón derecho en el nombre de la pestaña Hoja:
Por lo general, esto se usa para proteger las celdas "bloqueadas" de la edición, permitiendo solo al usuario final editar ciertas celdas.
Puede bloquear celdas seleccionándolas y abriendo el Pestaña de protección de El Menú de formato de celda (CTRL + 1).
También puede evitar que el usuario cambie la estructura de la hoja de trabajo (insertando, eliminando o cambiando el tamaño de Filas y Columnas), o que interactúe con Autofiltros, y mucho más.
Proteger la hoja de trabajo: sin contraseña
Es posible que desee proteger una hoja de trabajo sin ingresar una contraseña. Esto evitará cambios accidentales en la hoja de trabajo, al tiempo que le da al usuario acceso para realizar cambios si lo desea.
1 | Hojas de trabajo ("Hoja1"). Proteger |
Proteger hoja de trabajo - Proteger con contraseña
1 | Hojas de trabajo ("Hoja1"). Proteger "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 su lugar, es posible que desee personalizar lo que está protegido:
12345 | Hojas de trabajo ("Hoja1"). Contraseña de protección: = strPassword, DrawingObjects: = True, Contents: = True, Escenarios: = 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 |
En lugar de usar la sintaxis anterior, recomiendo grabar una macro con la configuración deseada (elegida con el menú Protección de hoja de trabajo anterior) y copiar + pegar el código grabado en su procedimiento.
Proteger hoja: permitir que VBA realice cambios
De forma predeterminada, cuando 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 tiempo de ejecución 1004. Para evitar esto, puede desproteger y volver a proteger sus hojas de trabajo siempre que VBA necesite interactuar con ellas:
123456789 | Sub Edit_Sheet1 ()'Desproteger Hoja1Hojas de trabajo ("Hoja1"). Desproteger'Hacer algo en la hoja 1'Reproteger Hoja1Hojas de trabajo ("Hoja1"). ProtegerEnd Sub |
Sin embargo, es fácil olvidarse de desproteger y / o volver a proteger sus 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 VERDADERO, las hojas de trabajo SOLO 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 trabajo (que se muestra arriba). Es una configuración que debe definirse en VBA.
- La configuración no se guarda cuando cierra un libro. Debe redefinirse cada vez que se abre un libro.
Entonces, para establecer la propiedad UserInterFaceOnly, debe colocar el siguiente procedimiento de evento Workbook_Open en el módulo ThisWorkbook:
1234567 | Private Sub Workbook_Open ()Dim ws como hoja de trabajoPara cada w en este libro de trabajo.ws.Protect UserInterfaceOnly: = VerdaderoSiguiente wsEnd Sub |
Workbook_Open es un procedimiento de evento especial que se ejecutará cada vez que se abra el libro. Debe colocarse en el módulo ThisWorkbook. Alternativamente, puede usar el procedimiento de evento Auto_Open (no cubierto aquí).
Desproteger la macro de todas las hojas
Esta macro desprotegerá todas las hojas de un libro de trabajo:
123456789 | 'Desproteger todas las hojas de trabajoSub UnProtectAllSheets ()Dim ws como hoja de trabajoPara cada ws en hojas de trabajows. Desproteger "contraseña"Siguiente wsEnd Sub |
Proteger todas las hojas macro
Esta macro protegerá todas las hojas de un libro de trabajo:
123456789 | 'Proteger todas las hojas de trabajoSub ProtectAllSheets ()Dim ws como hoja de trabajoPara cada ws en hojas de trabajows.Protect "contraseña"Siguiente wsEnd Sub |