Ocultar 6 hojas y mostrar varias dependiendo contenido de una celda

He visto una respuesta de como ocultar 2 hojs o pestañas de excel y mostrar una. Mi problema es que necesito mostrar 6 distintas y ocultar en principio 5

Yo tengo un fórmula donde hago el calculo de un modelo de puerta, la hoja se llama CÁLCULOS MEDIDAS y en la celda F9 escoge el modelo de puerta que se llama como la hoja que quiero que se muestre y el resto se debe de ocultar. Las hojas se llaman

2 HOJAS MÓVILES

2 HOJAS MOVILES+FIJAS

1 hoja móvil derecha

1 hoja moil izquierda

1 hoja móvil+fija derecha

1 hoja móvil+fina izquierda

En el caso que escogo 2 HOJAS MÓVILES se debe de ver esta y ocultar las otras 5, de momento son 5 pero puede que añada alguna más

Luego hay 2 pestañas más que me gustaría se mostrases

2 HOJAS MÓVILES CRISTALES

2 hojas móviles perfilería

Así en los 6 posibiles combinaciones que siempre hay las mismas variantes de hojas con CRISTALES y PERFILERÍA

En el siguiente opción con F9 escogido 1 HOJA MÓVIL DERECHA

Se debe de mostrar

1 hoja móvil derecha

1 hoja móvil derecha cristales

1 hoja móvil derecha perfilería

Y ocultar todas las demás que serias 10 en total


        

1 Respuesta

Respuesta
2

La vi un poco confusa la consulta ya que no queda claro si son 6, 8 o 10 hojas.

Te dejo una macro de ejemplo que se coloca en el objeto HOJA donde tendrás la celda para seleccionar. Tendrás que completar los CASE según todos los textos que pueden presentarse en celda F9.

Lo que hace es ocultar todas (menos la hoja activa desde donde seleccionas el item) y luego mostrar las que correspondan a la selección. Coloca en cada Array el nombre de tus hojas permitidas.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim mostrar()
'solo se ejecuta al seleccinar F9 y si tiene valor.
If Target.Address <> "$F$9" Or Target = "" Then Exit Sub
hox = Target.Value   'valor de la celda
Select Case hox
    Case Is = "1 HOJA MOVIL DERECHA"
        mostrar = Array("Hoja2", "Hoja3", "Global")
     Case Is = "1 HOJA MOVIL IZQUIERDA"
        mostrar = Array("Resumen", "2020", "2019")
    'otros case
End Select
For Each sh In Sheets
    If sh.Name <> "Hoja1" Then sh.Visible = False
Next sh
For Each sh In Sheets
    For x = LBound(mostrar()) To UBound(mostrar())
        If InStr(1, sh.Name, mostrar(x)) > 0 Then sh.Visible = True
    Next x
Next sh
End Sub

 Si te queda alguna duda comentame con todos los detalles del caso.

Si el tema queda resuelto no olvides valorar la respuesta.

Muchas gracias, de momento no consigo que me funcione

Discúlpame al final no se si me explique bien, pero he probado y no sé si he relleando bien los datos

Te explico con más detalle

La hoja donde pongo la macro se llama "CALCULO PUERTA"

En la celda F9 tengo una lista desplegable con los 6 modelos de puerta que estoy diseñando

2 HOJAS MÓVILES

2 HOJAS MOVILES+FIJAS

1 HOJA MÓVIL DCHA

1 HOJA MÓVIL+FIJA DCHA

1 HOJA MÓVIL IZQUIERDA

1 HOJA MÓVIL+FIJA IZQUIERDA

Lo que quiero hacer es que cuando escoja el modelo

2 HOJAS MÓVILES solo se muestre esta hoja y la de CALCULO PUERTA y las otras 5 permanezcan ocultas

Cuando escoja 2 HOJAS MÓVILES+FIJAS debe de mostrarse esta hoja y la hoja de CALCULO PUERTA y permanecer ocultas las otras 5

Y así en los 6 casos

Puse 6 u 8 10 porque no sé si luego añadiré algún otro modelo

No me ha sabido cambiar los ARRAY o hago algo que no me funciona

Muchas gracias de nuevo

Si, estaba muy confusa tu consulta. Pero ahora la resumiste tanto que en unos días más ya tendrás necesidad de modificar la macro. Por esto que habías comentado al final de la primer consulta:

En el siguiente opción con F9 escogido 1 HOJA MÓVIL DERECHA

Se debe de mostrar

1 hoja móvil derecha

1 hoja móvil derecha cristales

1 hoja móvil derecha perfilería

Por eso utilizo un Array, donde coloco todas las hojas a mostrar, ya sea 1, 2, 3, etc.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim mostrar()
'solo se ejecuta al CAMBIO en F9 y si tiene valor.
If Target.Address <> "$F$9" Or Target = "" Then Exit Sub
hox = Target.Value   'valor de la celda
'primero se ocultan todas menos la de cálculo
For Each sh In Sheets
    If sh.Name <> "CALCULO PUERTA" Then sh.Visible = False
Next sh
'según lo seleccionado en F9 se arma la matriz con los nombres de hojas a mostrar
Select Case hox
    Case Is = "2 HOJAS MÓVILES"
        mostrar = Array("2 HOJAS MÓVILES")
    Case Is = "2 HOJAS MOVILES+FIJAS"
        mostrar = Array("2 HOJAS MOVILES+FIJAS")
    Case Is = "1 HOJA MÓVIL DCHA"
        mostrar = Array("1 HOJA MÓVIL DCHA", "1 HOJA MÓVIL DCHA CRISTALES", "1 HOJA MÓVIL DCHA PERFILERÍA")
    'completar los otros 3 case
End Select
For x = LBound(mostrar()) To UBound(mostrar())
    Sheets(mostrar(x)).Visible = True
Next x
End Sub

Solo tenés que completar los Case que faltan y completar los Array con los nombres de las hojas a mostrar. En el 3er case agregué también Cristales y Perfiles como ejemplo y según tu ejemplo al inicio de la consulta.

La macro se coloca en el objeto HOJA llamada CALCULO PUERTA (cambié a evento Change porque se ejecutará al cambiar la celda y no al seleccionarla.)

PD) Atención con los nombres de hojas, algunas llevan acento y otras no ;(

Sdos!

Muchísimas Gracias

Ha funcionado genial, me ha dado un poco de problemas porque tenia una letra cambiada en IZDA pero todo culpa de las faltas de orotgrafia

Ya lo he votado como excelente pero me ha parecido más que excelente, me ha parecdido hacer algo que creía que era imposible.

Ya para terminarla y dejarla con una página profesional he visto algunas páginas que ponen un botón de finalizar o comenzar o aplicar y en vez de mostrar la hoja excel lo que hace es que genera directamente un PDF de las hojas que se deben de mostrar . Creo que se hace con otra macro, si me puedes también informar de como hacerlo. En una celda que no tengo definida

Gracias de nuevo de antemano, la verdad es que el mundo excel es muy amplio, estoy consultando con alguien próximo para poder contratar este tipo de trabajos puntuale pero no he encontrado de momento

Para lo del PDF debieras colocar otra consulta cuando tengas esto definido (En una celda que no tengo definida)

Si quieres puedes enviame un correo a cibersoft. Arg de Gmail y conversamos sobre tu aplicación.

Sdos!

Muchas Gracias de nuevo

Sigo probando opciones para continuar mejorando la pequeña aplicación

Se convierte mal el correo por el punto, a ver si así queda más claro (sin los espacios):

Cibersoft PUNTO arg ARROBA gmail PUNTO com

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas