Ocultar y mostrar hojas con macro

Tengo un libro con varias hojas una de ellas la hoja portada, al abrirlo tengo puesta una sentencia en thisworkbook que me solicita una clave de acceso mediante un inputbox cuando pongo la contraseña correcta se activa la hoja portada y el resto de las hojas tambien estan visibles. La idea es que cuando ponga la clave de acceso me oculte la hoja portada y me muestre el resto de las hojas, y cuando cierre el libro me oculte las hojas otra vez dejando la hoja portada para cuando vuelva a abrir el libro de nuevo. Espero haberme explicado correctamente. Te dejo las sentencias que quiero usar para ocultar las hojas (me da error) y para abrir el libro (en esta no se como hacer para que me oculte la portada y me muestre las otras hojas). Muchas gracias por tu tiempo.

PD: aprovecho para comentarte que estoy recibiendo contestaciones tuyas sobre preguntas que no he realizado, quizá

' Esta es la que uso para abrir el libro con clave 
Private Sub Workbook_Open()
' con esta macro ponemos una fecha a partir de la cual aparecera una peticion de
' licencia de uso para poder abrir el libro no pudiendo hacer nada mas que introducir
' correctamente la clave
If Date <= DateSerial(2016, 1, 7) Then Exit Sub
Application.EnableCancelKey = xlErrorHandler
On Error GoTo Ver_Error
licenciauso = InputBox("Introducir la licencia de uso")
If licenciauso <> "furilo" Then
MsgBox "Clave incorrecta; VUELVA A INTRODUCIR LA CLAVE"
licenciauso2 = InputBox("licencia de uso 2ª oportunidad")
If licenciauso2 <> "furilo" Then
MsgBox "Clave incorrecta; ULTIMA OPORTUNIDAD PARA INTRODUCIR LA CLAVE"
licenciauso3 = InputBox("licencia de uso 3ª y Ultima oportunidad")
If licenciauso3 <> "furilo" Then
Application.DisplayAlerts = False
ActiveWorkbook.Close
End If
    End If
        End If
GoTo fin
Ver_Error:
Application.DisplayAlerts = False
ActiveWorkbook.Close
fin:
End Sub
' ESTA ES LA QUE INTENTABA USAR PARA OCULTAR LAS HOJAS PERO ME DA ERROR
thisworkbook.sheets("nombredela hoja") = xlSheetVeryHidden
Respuesta
2

Te paso las macros que necesitas:

Private Sub Workbook_Open()
'Ajustada x Elsamatilde
' con esta macro ponemos una fecha a partir de la cual aparecera una peticion de
' licencia de uso para poder abrir el libro no pudiendo hacer nada mas que introducir
' correctamente la clave
If Date <= DateSerial(2016, 1, 7) Then GoTo sigo
Application.EnableCancelKey = xlErrorHandler
On Error GoTo Ver_Error
licenciauso = InputBox("Introducir la licencia de uso")
If licenciauso <> "furilo" Then
MsgBox "Clave incorrecta; VUELVA A INTRODUCIR LA CLAVE"
licenciauso2 = InputBox("licencia de uso 2ª oportunidad")
If licenciauso2 <> "furilo" Then
MsgBox "Clave incorrecta; ULTIMA OPORTUNIDAD PARA INTRODUCIR LA CLAVE"
licenciauso3 = InputBox("licencia de uso 3ª y Ultima oportunidad")
If licenciauso3 <> "furilo" Then
Application.DisplayAlerts = False
ActiveWorkbook.Close
Exit Sub
Else
GoTo sigo
End If
Else
GoTo sigo
End If
End If
sigo:
Application.ScreenUpdating = False
'muestra el resto de las hojas y oculta portada
For Each sh In Sheets
sh.Visible = True
Next sh
Sheets("Portada").Visible = xlSheetVeryHidden
Exit Sub
Ver_Error:
Application.DisplayAlerts = False
ActiveWorkbook.Close
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'x Elsamatilde
'para mostrar la portada y ocultar el resto de hojas
Application.ScreenUpdating = False
Sheets("Portada").Visible = True
For Each sh In Sheets
    If sh.Name <> "Portada" Then sh.Visible = xlSheetVeryHidden
Next sh
End Sub

Las instrucciones que van en el evento BeforeClose debieran ser colocadas también en el evento BeforeSave, para evitar que guarden el libro con todas las hojas visibles.

Muchas gracias como siempre funciona estupendamente tu corrección, solo un comentario, efectivamente quiero que se oculten todas las hojas al cerrar el libro, pero no quiero que se muestren todas al abrirlo , solamente las hojas Planning, Calendario y Agenda,porque las demás las utilizo como referencia para que funcionen los calendarios y no necesito usarlas normalmente, perdona por no haberme explicado bien cuando hice la pregunta. Como puedo modificar la sentencia..? Gracias.

Esta sería una de las maneras, en el bucle para mostrarlas:

'muestra el resto de las hojas y oculta portada
For Each sh In Sheets
If sh.Name = "Planning" Or sh.Name = "Calendario" Or sh.Name = "Agenda" Then sh.Visible = True
Next sh

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas