Vamos a continuar con la aplicación del objeto Workbook utilizando sus Métodos y en esta ocasión veremos cómo se puede programar una macro para poder bloquear o proteger el Libro de trabajo impidiendo cambiar su estructura como mover, agregar o eliminar hojas. Para lograr esto vamos a utilizar el Método Protect.
proteger libro Excel con contraseña Vba.
Método Protect: Con la aplicación de este método, lo que estamos indicando desde VBA es la opción de Activar la opción de protección que se encuentra en la ficha REVISAR Proteger Libro. Esta opción es muy útil para asegurar la estructura del libro de trabajo, evitar insertar o eliminar hojas.
Desde Excel abrimos el Editor VBA (Alt + F11), insertamos un Módulo (Clic derecho sobre el proyecto Excel, Insertar, Módulo:
Ingresamos el siguiente código:
Sub ProtegerLibro()
ThisWorkbook.Protect
End Sub
Queda de la siguiente manera en el Módulo:
Veamos lo que significan cada una de las líneas:
- La primera línea Sub ProtegerLibro (), indica el inicio de la macro.
- En la segunda línea estamos utilizando del Objeto ThisWorkbook el Método Protect el cual nos permite aplicar un nivel de Protección al nivel de la estructura del Libro.
- La última línea marca el fin (End) de la Macro o Subrutina (Sub).
Al ejecutar la macro, a simple vista parece que no pasara nada, pero si intentamos insertar o eliminar una hoja nos daremos cuenta que estas opciones no estas habilitadas; probemos asignando la macro a una autoforma con clic derecho Asignar macro:
En la ventana de asignación de macros seleccionamos la macro ProtegerLibro, damos Aceptar y probemos dando clic en el botón.
Hola, ¿qué tal?
Quisiera saber cómo hacer, si tengo varias hojas de cálculo, que si la primera hoja de cálculo no está llena, las siguientes hojas no se puedan llenar. Es decir, si la primera hoja no está llena, las demás no deben funcionar.
Para lograr que las hojas de cálculo dependan del estado de la primera hoja en Excel, puede utilizar la siguiente macro:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets(“Hoja1”)
‘ Reemplaza A1:Z100 con el rango que necesitas verificar
Dim cell As Range
Dim vacio As Boolean
vacio = False
For Each cell In ws1.Range(“A1:Z100”)
If IsEmpty(cell.Value) Then
vacio = True
Exit For
End If
Next cell
‘ Si Hoja1 no está llena y se intenta acceder a otra hoja…
If vacio And Sh.Name “Hoja1” Then
MsgBox “Primero debes completar todos los campos en Hoja1.”, vbExclamation
Sheets(“Hoja1”).Activate
End If
End Sub
Cada vez que alguien intenta ir a otra hoja, Excel revisa si hay celdas vacías en el rango de “Hoja1”.
Si encuentra alguna vacía, no permite cambiar de hoja y muestra un mensaje.