VBA para proteger ciertas hojas de un libro Excel
Con la ayuda de un truco de VBA de Excel puedes permitir que el usuario solo pueda abrir por ejemplo la primera hoja (sin palabra de paso) - pero no las otras (cuales requieren palabra de paso). Esta función no está integrada en Excel (sorprendentemente), por eso hay que recurrir a VBA.
Eventos empleados para la protección
Para esto vamos a utilizar el evento Workbook_SheetActivate, un evento que salta cada vez que alguna hoja se active. Es decir, el evento se activará cuando el usuario hace click sobre una etiqueta de una hoja. Si la hoja forma parte de las restringidas, Excel pedirá palabra de paso. Al introducir una palabra de paso erronea, se queda en la hoja anterior.
Grado de seguridad de la macro para proteger hojas
Cualquier persona puede entrar al código VBA para ver la palabra de paso. Por eso debes proteger el codigo (VBA editor - Click derecho sobre EsteLibro - Propiedades).
Este método no da 100% de seguridad. Si activamos la protección de los módulos VBA tenemos bastante seguridad, pero hay que tener en cuenta que existen varios programas comerciales para resolver el tema de palabras de paso de Excel.
Los procedimientos
Pon este código en el contenedor 'EsteLibro' del editor VBA (Herramientas - Macro - Editor VBA).
Luego tienes que poner que hojas/palabra de paso (ver 'Preparar modelo' del código).
Código VBA para proteger hojas Excel
Dim strStartHoja As String Dim strSegundaHoja As String Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim z As Integer Dim i As Integer Dim x As Boolean Dim varHoja As Variant Dim varPaso As Variant Dim varInput As Variant 'preparar modelo [admin. input] varHoja = Array("Sheet2", "Sheet3") 'las hojas a proteger... varPaso = "gofio" 'palabra de paso... [letras/números] 'desconectar otros Events (evitar un tipo de bucle) Application.EnableEvents = False 'comprobar hojas strSegundaHoja = Sh.Name For i = LBound(varHoja) To UBound(varHoja) If varHoja(i) = strSegundaHoja Then x = True Next i If x = False Then GoTo 99 'ocultar la hoja temporalmente z = ActiveWindow.Index Windows(z).Visible = False 'comparar palabra de paso varInput = InputBox("Palabra de paso:") If varInput <> varPaso Then Sheets(strStartHoja).Select 'volver a mostrar la hoja Windows(z).Visible = True 99: 'conectar Events Application.EnableEvents = True End Sub '************************************************* Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 'recordar hoja inicial strStartHoja = Sh.Name End Sub



