Ocultar hojas excel cuando cambio de la hoja portada

Necesitaría ayuda para crear macro que oculte todas las hojas de un libro (tengo 25) al volvel a pinchar en la pestaña de la hoja "portada" se oculte la que ha estado abierta

En la hoja portada tengo accesos directos al resto de las hojas

2 Respuestas

Respuesta
2

Pon el siguiente código en los eventos de la hoja "Portada"

Private Sub Worksheet_Activate()
  Dim sh As Worksheet
  For Each sh In Sheets
    If LCase(sh.Name) <> LCase("Portada") Then
      sh.Visible = xlSheetHidden
    End If
  Next
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet("Portada")
  4. En el panel del lado derecho copia la macro

Funciona bien ocultado todas las hojas, pero los accesos directos que tengo en cada hoja no funcionan

Tengo este para que me deje abiertas dos hojas, pero me pasa lo mismo que con el tuyo

Los accesos directos de la hoja portada no funcionan

Private Sub Workbook_Open()
Sheets("Portada").Select
    Range("A1").Select
End Sub
------------------------------------------------------------------------------------------------
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> "portada" And Sh.Name <> "precios"Then
Sh.Visible = False
End If
End Sub

Funciona bien ocultado todas las hojas

Eso es lo que pediste.

¿O qué necesitas?


Los accesos directos de la hoja portada no funcionan

No entiendo a qué te refieres con "accesos directos".


¿Quieres qué arregle también tus "accesos directos"?

¿O qué necesitas?


Explica paso a paso qué quieres hacer.

Paso 1. ...

Paso 2. ...

Paso 3. ...

En qué paso quieres ocultar todas las hojas.

Paso 4. ...

Paso 1: que al abrir el libro estén todos las hojas ocultas menos dos "portada" y "precios"

Paso 2: al entrar en el libro y en la hoja "portada" hay accesos directos al resto de las hojas que están todas ocultas menos las dos mencionadas 

Paso 3: al pinchar en un acceso directo de la hoja "Portada" sale directamente la hoja nº1 y te sitúa en la celda A1 de dicha hoja para poder trabajar en ella

Paso 4: cuando vuelves a la hoja "portada", se oculta la hoja nº1

Así con los 25 accesos directos que van a 25 hojas diferentes

Se trata de que necesito trabajar en una hoja concreta, y que no tenga que estar buscándola en la parte inferior por las pestañas

Tal vez no pregunté bien.

¿El acceso directo es una macro? Puedes poner aquí ese código.

Mencionas: "Funciona bien ocultado todas las hojas, pero los accesos directos que tengo en cada hoja no funcionan"

Debes explicar a qué te refieres con "no funcionan".


Esto está bien en los eventos de ThisWorkbook

Private Sub Workbook_Open()
Sheets("Portada").Select
    Range("A1").Select
End Sub

Quita este código:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> "portada" And Sh.Name <> "precios"Then
Sh.Visible = False
End If
End Sub

Pon este código en los eventos de tu hoja "portada"

Private Sub Worksheet_Activate()
  Dim sh As Worksheet
  For Each sh In Sheets
    Select Case LCase(sh.Name)
      Case LCase("Portada"), LCase("precios")
      Case Else
        sh.Visible = xlSheetHidden
    End Select
  Next
End Sub

Si tienes más códigos, debes decirme, porque no puedo suponer todo lo que hay  en tu archivo.

Hola, no tengo más códigos

Y probaste lo que comenté.

Quita este código:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> "portada" And Sh.Name <> "precios"Then
Sh.Visible = False
End If
End Sub

Y prueba mi código

Tus codigos funcionan perfectamente para para los pasos 1 y 2

Pero cuando quiero acceder al resto de hojas que estan ocultas, no puedo

En la hoja portada tengo hipervinculos a otras jas del mismo libro, las que hemos ocultado con tu macro. Pero pincho en el hipervinculo y no habre la hoja que tiene asignada

Pincho en la celda A2 y no me aparece la hoja con nombre "Hola1"

Tendría que ser que al pinchar cada celda de A2 hasta A26 saliese una hoja diferente para poder trabajar en ellas

Tus códigos funcionan perfectamente para para los pasos 1 y 2

Eso es lo que pediste en esta pregunta. Deberías valorar mi respuesta.

Con gusto te ayudo con todas tus peticiones, pero lo que estás solicitando, es algo nuevo, reviso la nueva pregunta que creaste y te ayudo.

Tus codigos funcionan perfectamente para para los pasos 1 y 2

Pero cuando quiero acceder al resto de hojas que estan ocultas, no puedo

En la hoja portada tengo hipervinculos a otras jas del mismo libro, las que hemos ocultado con tu macro. Pero pincho en el hipervinculo y no habre la hoja que tiene asignada

Va el código actualizado para que puedas mostrar la hoja seleccionada con el hipervínculo.

Pon el código en los eventos de tu hoja "portada", quedaría así:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
  Dim hoja As String
  hoja = Target.Parent
  Sheets(hoja).Visible = xlSheetVisible
  Sheets(hoja).Activate
  Sheets(hoja).Range("A1").Select
End Sub
Private Sub Worksheet_Activate()
  Dim sh As Worksheet
  For Each sh In Sheets
    Select Case LCase(sh.Name)
      Case LCase("Portada"), LCase("precios")
      Case Else
        sh.Visible = xlSheetHidden
    End Select
  Next
End Sub

[No olvides valorarme.

Respuesta
2

Dice un refrán que una imagen vale más que mil palabras...

Te invito a mirar el video 47 de mi canal donde explico los eventos Activate y Deactivate de las hojas (puedes descargar el libro con los ejemplos desde el blog)

Gracias Elsa, no he visto el libro para descargarle

Si me puedes mandar un link

Gracias

Al pie del video dejo un par de enlaces... uno es el del blog donde voy dejando los libros de ejemplo.

Aquí te lo paso, es el primero titulado 47-

 https://elsamatilde.blogspot.com/ 

PD) Te reitero lo comentado en el video: solo se puede tener 1 tipo de evento x hoja ... y si está en el objeto ThisWorkbook, por ej: Workbook_SheetActivate no va en la hoja.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas