Macro que oculte hojas

31/08/2007 - 16:06 por Marta | Informe spam
Hola a todos,

A ver si me echáis una manita con esto.

Tengo un documento con varias hojas, la primera de ellas siempre se ve y las
demás están ocultas.
En la primera hoja (la que está siempre visible) hay una serie de botones
cada uno con una macro. Si pincho en el botón 1 la macro lo que hace es
mostrar de las hojas ocultas aquellas que relacionadas con el grupo 1. Si
pincho en el botón 2, me muestra de las hojas ocultas las relacionadas con el
grupo 2... y así sucesivamente con todos los botones que tengo.

El problema es que lo que quiero es que si por ejemplo, pincho en botón 1 y
se muestran todas las hojas del grupo 1. Si ahora pincho en el botón 2 quiero
que se oculten todas las que no sean del grupo 2 y se muestren las del grupo
2.

No consigo hacer una macro que diga "ocultar todas las hojas que están
visibles excepto la hoja Control Panel" (que es la primera, donde están los
botones)... ya que cada hoja tiene nombres distintos y cada vez que pincho en
un botón de antemano no sé cómo se van a llamar las hojas que están mostradas
y quiero ocultar.

¿Me explico?

Pues eso, muchísimas gracias a todos por vuestra ayuda,
Martape

Preguntas similare

Leer las respuestas

#1 César G.
31/08/2007 - 18:04 | Informe spam
Hola Marta

Te serviría el número de la hoja ?

Es decir, si no quieres que se oculte la primera hoja puedes contar cuantas
hojas hay y despues en base a eso hacer algo asi


For i = 2 To ActiveWorkbook.Worksheets.Count
'seleccionar la hoja
ActiveWorkbook.Sheets(i).Select
'ocultarla
ActiveWindow.SelectedSheets.Visible = False

Next i

En algun momento quizás puedas guardar el nombre de la hoja en un arreglo, y
despues recorrerlo dependiendo el nombre

dim NombreHojasGpo1() as string

luego cuando sepas el nombre y la cantidad de hojas

redim NombreHojasGpo1(ActiveWorkbook.Worksheets.Count -1) as string

y luego tal vez usar el arreglo para ocultarlas por su nombre.

solo es una idea, espero que te sea de utilidad.

César G.







"Marta" escribió en el mensaje
news:
Hola a todos,

A ver si me echáis una manita con esto.

Tengo un documento con varias hojas, la primera de ellas siempre se ve y
las
demás están ocultas.
En la primera hoja (la que está siempre visible) hay una serie de botones
cada uno con una macro. Si pincho en el botón 1 la macro lo que hace es
mostrar de las hojas ocultas aquellas que relacionadas con el grupo 1. Si
pincho en el botón 2, me muestra de las hojas ocultas las relacionadas con
el
grupo 2... y así sucesivamente con todos los botones que tengo.

El problema es que lo que quiero es que si por ejemplo, pincho en botón 1
y
se muestran todas las hojas del grupo 1. Si ahora pincho en el botón 2
quiero
que se oculten todas las que no sean del grupo 2 y se muestren las del
grupo
2.

No consigo hacer una macro que diga "ocultar todas las hojas que están
visibles excepto la hoja Control Panel" (que es la primera, donde están
los
botones)... ya que cada hoja tiene nombres distintos y cada vez que pincho
en
un botón de antemano no sé cómo se van a llamar las hojas que están
mostradas
y quiero ocultar.

¿Me explico?

Pues eso, muchísimas gracias a todos por vuestra ayuda,
Martape
Respuesta Responder a este mensaje
#2 Héctor Miguel
31/08/2007 - 18:22 | Informe spam
hola, Marta !

Tengo un documento con varias hojas, la primera de ellas siempre se ve y las demas estan ocultas.
En la primera hoja (la que esta siempre visible) hay una serie de botones cada uno con una macro.
Si pincho en el boton 1 la macro lo que hace es mostrar de las hojas ocultas aquellas que relacionadas con el grupo 1.
Si pincho en el boton 2, me muestra de las hojas ocultas las relacionadas con el grupo 2
... y asi sucesivamente con todos los botones que tengo.
El problema es que lo que quiero es que si por ejemplo, pincho en boton 1 y se muestran todas las hojas del grupo 1.
Si ahora pincho en el boton 2 quiero que se oculten todas las que no sean del grupo 2 y se muestren las del grupo 2.
No consigo hacer una macro que diga "ocultar todas las hojas que estan visibles excepto la hoja Control Panel"
(que es la primera, donde estan los botones)... ya que cada hoja tiene nombres distintos
y cada vez que pincho en un boton de antemano no se como se van a llamar las hojas que estan mostradas y quiero ocultar...



op1: usa como primera instruccion en cada macro asignada a cada boton algun codigo que...
-> primero oculte todas las hojas de todos los grupos
-> despues muestre solo las hojas del grupo correspondiente al boton pinchado ;)


op2: comenta algunos detalles como:
- que tipo de botones incrustaste en la hoja [cuadro de controles o formulario]
- cuantos grupos tienes y cuales son los nombres de hoja que corresponden a cada *grupo*
- como es la el codigo que se ejecuta al pinchar cada boton [asumo que es +/- lo mismo para todos]
- alguna posibilidad de que los grupos [y sus hojas] se vuelvan *dinamicos* -???-

saludos,
hector.
Respuesta Responder a este mensaje
#3 Marta
31/08/2007 - 19:12 | Informe spam
Hola a todos,

Gracias por vuestras respuestas... la de César no consigo ponerla en marcha.

Voy con tus respuestas, Héctor Miguel:

La opción 1 me encantaría, pero... cómo se hace una macro que oculte todas
las hojas que están visibles? Como cada una tiene su nombre, no sé cómo hacer
esta macro. Para mí sería lo ideal, se ejecuta y oculta todas las hojas que
hay visibles, pero... como sería su sintaxis?

Opción 2: te comento detalles:
- Los botones son muy simples, son un simple botón que inserté desde la
barra de herramientas de formulario, y a cada uno le he asignado una macro.
- Tengo en total 7 grupos, cada uno de ellos tiene asociadas 4 hojas. Te
pongo la estructura:
Grupo 1: se llama "All Markets" y las hojas asociadas se llaman:
"Summary_All", "Totals_All", "Averages_All", "Sickness Rate_All"
Grupo 2: se llama "UK" y las hojas asociadas se llaman: "Summary_UK",
"Totals_UK", "Averages_UK", "Sickness Rate_UK"
Grupo 3: se llama "DE" y las hojas asociadas se llaman: "Summary_DE",
"Totals_DE", "Averages_DE", "Sickness Rate_DE"
Grupo 4: se llama "FR" y las hojas asociadas se llaman: "Summary_FR",
"Totals_FR", "Averages_FR", "Sickness Rate_FR"
Grupo 5: se llama "ES" y las hojas asociadas se llaman: "Summary_ES",
"Totals_ES", "Averages_ES", "Sickness Rate_ES"
Grupo 6: se llama "NL" y las hojas asociadas se llaman: "Summary_NL",
"Totals_NL", "Averages_NL", "Sickness Rate_NL"
Grupo 7: se llama "Nordics" y las hojas asociadas se llaman:
"Summary_Nrds", "Totals_Nrds", "Averages_Nrds", "Sickness Rate_Nrds"

- El código que se ejecuta al pinchar cada botón es muy simple. Si pincho en
el de UK, la macro lo que hace es hacer visibles las cuatro pestañas de UK.
Ahora lo que me falta es, o bien al principio de cada macro hacer que oculte
todas las hojas que hay visibles en ese momento y muestre las del grupo que
corresponda, o bien dejar las macros de los botones como están, y crear otra
independiente que simplemente oculte todas las hojas que hay visibles en ese
momento, y luego solo me quedará pinchar en un botón para mostrar el grupo,
luego en la macro que limpie las pestañas, luego en otro botón, etc...

Muchas gracias por vuestra ayuda,
Martape

"Héctor Miguel" wrote:

hola, Marta !

> Tengo un documento con varias hojas, la primera de ellas siempre se ve y las demas estan ocultas.
> En la primera hoja (la que esta siempre visible) hay una serie de botones cada uno con una macro.
> Si pincho en el boton 1 la macro lo que hace es mostrar de las hojas ocultas aquellas que relacionadas con el grupo 1.
> Si pincho en el boton 2, me muestra de las hojas ocultas las relacionadas con el grupo 2
> ... y asi sucesivamente con todos los botones que tengo.
> El problema es que lo que quiero es que si por ejemplo, pincho en boton 1 y se muestran todas las hojas del grupo 1.
> Si ahora pincho en el boton 2 quiero que se oculten todas las que no sean del grupo 2 y se muestren las del grupo 2.
> No consigo hacer una macro que diga "ocultar todas las hojas que estan visibles excepto la hoja Control Panel"
> (que es la primera, donde estan los botones)... ya que cada hoja tiene nombres distintos
> y cada vez que pincho en un boton de antemano no se como se van a llamar las hojas que estan mostradas y quiero ocultar...

op1: usa como primera instruccion en cada macro asignada a cada boton algun codigo que...
-> primero oculte todas las hojas de todos los grupos
-> despues muestre solo las hojas del grupo correspondiente al boton pinchado ;)


op2: comenta algunos detalles como:
- que tipo de botones incrustaste en la hoja [cuadro de controles o formulario]
- cuantos grupos tienes y cuales son los nombres de hoja que corresponden a cada *grupo*
- como es la el codigo que se ejecuta al pinchar cada boton [asumo que es +/- lo mismo para todos]
- alguna posibilidad de que los grupos [y sus hojas] se vuelvan *dinamicos* -???-

saludos,
hector.



Respuesta Responder a este mensaje
#4 Marta
31/08/2007 - 19:12 | Informe spam
Hola a todos,

Gracias por vuestras respuestas... la de César no consigo ponerla en marcha.

Voy con tus respuestas, Héctor Miguel:

La opción 1 me encantaría, pero... cómo se hace una macro que oculte todas
las hojas que están visibles? Como cada una tiene su nombre, no sé cómo hacer
esta macro. Para mí sería lo ideal, se ejecuta y oculta todas las hojas que
hay visibles, pero... como sería su sintaxis?

Opción 2: te comento detalles:
- Los botones son muy simples, son un simple botón que inserté desde la
barra de herramientas de formulario, y a cada uno le he asignado una macro.
- Tengo en total 7 grupos, cada uno de ellos tiene asociadas 4 hojas. Te
pongo la estructura:
Grupo 1: se llama "All Markets" y las hojas asociadas se llaman:
"Summary_All", "Totals_All", "Averages_All", "Sickness Rate_All"
Grupo 2: se llama "UK" y las hojas asociadas se llaman: "Summary_UK",
"Totals_UK", "Averages_UK", "Sickness Rate_UK"
Grupo 3: se llama "DE" y las hojas asociadas se llaman: "Summary_DE",
"Totals_DE", "Averages_DE", "Sickness Rate_DE"
Grupo 4: se llama "FR" y las hojas asociadas se llaman: "Summary_FR",
"Totals_FR", "Averages_FR", "Sickness Rate_FR"
Grupo 5: se llama "ES" y las hojas asociadas se llaman: "Summary_ES",
"Totals_ES", "Averages_ES", "Sickness Rate_ES"
Grupo 6: se llama "NL" y las hojas asociadas se llaman: "Summary_NL",
"Totals_NL", "Averages_NL", "Sickness Rate_NL"
Grupo 7: se llama "Nordics" y las hojas asociadas se llaman:
"Summary_Nrds", "Totals_Nrds", "Averages_Nrds", "Sickness Rate_Nrds"

- El código que se ejecuta al pinchar cada botón es muy simple. Si pincho en
el de UK, la macro lo que hace es hacer visibles las cuatro pestañas de UK.
Ahora lo que me falta es, o bien al principio de cada macro hacer que oculte
todas las hojas que hay visibles en ese momento y muestre las del grupo que
corresponda, o bien dejar las macros de los botones como están, y crear otra
independiente que simplemente oculte todas las hojas que hay visibles en ese
momento, y luego solo me quedará pinchar en un botón para mostrar el grupo,
luego en la macro que limpie las pestañas, luego en otro botón, etc...

Muchas gracias por vuestra ayuda,
Martape

"Héctor Miguel" wrote:

hola, Marta !

> Tengo un documento con varias hojas, la primera de ellas siempre se ve y las demas estan ocultas.
> En la primera hoja (la que esta siempre visible) hay una serie de botones cada uno con una macro.
> Si pincho en el boton 1 la macro lo que hace es mostrar de las hojas ocultas aquellas que relacionadas con el grupo 1.
> Si pincho en el boton 2, me muestra de las hojas ocultas las relacionadas con el grupo 2
> ... y asi sucesivamente con todos los botones que tengo.
> El problema es que lo que quiero es que si por ejemplo, pincho en boton 1 y se muestran todas las hojas del grupo 1.
> Si ahora pincho en el boton 2 quiero que se oculten todas las que no sean del grupo 2 y se muestren las del grupo 2.
> No consigo hacer una macro que diga "ocultar todas las hojas que estan visibles excepto la hoja Control Panel"
> (que es la primera, donde estan los botones)... ya que cada hoja tiene nombres distintos
> y cada vez que pincho en un boton de antemano no se como se van a llamar las hojas que estan mostradas y quiero ocultar...

op1: usa como primera instruccion en cada macro asignada a cada boton algun codigo que...
-> primero oculte todas las hojas de todos los grupos
-> despues muestre solo las hojas del grupo correspondiente al boton pinchado ;)


op2: comenta algunos detalles como:
- que tipo de botones incrustaste en la hoja [cuadro de controles o formulario]
- cuantos grupos tienes y cuales son los nombres de hoja que corresponden a cada *grupo*
- como es la el codigo que se ejecuta al pinchar cada boton [asumo que es +/- lo mismo para todos]
- alguna posibilidad de que los grupos [y sus hojas] se vuelvan *dinamicos* -???-

saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
31/08/2007 - 21:19 | Informe spam
hola, Marta !

1) con los siguientes *entendidos*:
a) 7 botones de la barra de herramientas formularios [NO cuadro de controles]
b) 7 grupos [uno por cada boton]: "All Markets", "UK", "DE", "FR", "ES", "NL" y "Nordics"
OJO: *presumo* que el anterior es el *titulo/nombre/Caption/...* escrito en cada boton ??? <= OJO
c) cada grupo con 4 hojas de nombre *generico*: "Summary_", "Totals_", "Averages_", Sickness Rate_"

2) haces las siguientes modificaciones:
a) los *Caption* [o titulo] de los botones 1 y 7 los cambias a 1="All" 7="Nrds" [para que coincidan con el *sufijo* de las hojas]
b) A TODOS los botones les asignas LA MISMA macro que en este ejemplo se llama: -> "Grupo_x()"
c) *el resto*... lo hacemos en el codigo [p.e.]
1) se ocultan todas las hojas excepto [obviamente] las que esten *fuera* de las constantes "Hojas" y "Grupos"
2) se muestran solo las hojas del boton *pinchado*
3) [adicionalmente] las hojas ocultas NO se muestran en el menu: formato / hoja / mostrar... :))
4) las ultimas lineas: -> #If Not VBA6 ... #End If son [y por si las dudas] solo aplicables cuando tu libro se ejecute en xl-97

3) copia/pega las siguientes lineas en un modulo de codigo normal/general/estandar/...
EN SUSTITUCION de todos los codigos que tenias asociados a cada boton y/o procedimiento para des/re/ocultar hojas <= OJO
y... cuando quieras/necesites ampliar/reducir los grupos y/o las hojas, solo revisa las constantes: "Hojas" y "Grupos" ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Public Const Hojas As String = "totals,summary,averages,sickness rate"
Public Const Grupos As String = "all,uk,de,fr,es,nl,nrds"
Dim gX As Byte, Gpo, hX As Byte, nHojas
Sub Grupo_x()
Application.ScreenUpdating = False
Oculta_todas
nHojas = Split(Hojas, ",")
For hX = LBound(nHojas) To UBound(nHojas)
Worksheets(nHojas(hX) & "_" & _
ActiveSheet.Buttons(Application.Caller).Caption).Visible = True
Next
End Sub
Private Sub Oculta_todas()
Gpo = Split(Grupos, ",")
nHojas = Split(Hojas, ",")
For gX = LBound(Gpo) To UBound(Gpo)
For hX = LBound(nHojas) To UBound(nHojas)
Worksheets(nHojas(hX) & "_" & Gpo(gX)).Visible = xlSheetVeryHidden
Next
Next
End Sub
#If Not VBA6 Then
Function Split(Cadena As String, Delimitador As String) As Variant
Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
End Function
#End If

__ la consulta original __
La opcion 1 me encantaria, pero... como se hace una macro que oculte todas las hojas que estan visibles?
Como cada una tiene su nombre... seria lo ideal, se ejecuta y oculta todas las hojas que hay visibles [...]

Opcion 2: te comento detalles:
- Los botones son... desde la barra de herramientas de formulario, y a cada uno le he asignado una macro.
- Tengo en total 7 grupos, cada uno de ellos tiene asociadas 4 hojas. Te pongo la estructura:
Grupo 1: se llama "All Markets" y las hojas asociadas se llaman: "Summary_All", "Totals_All", "Averages_All", "Sickness Rate_All"
Grupo 2: se llama "UK" y las hojas asociadas se llaman: "Summary_UK", "Totals_UK", "Averages_UK", "Sickness Rate_UK"
Grupo 3: se llama "DE" y las hojas asociadas se llaman: "Summary_DE", "Totals_DE", "Averages_DE", "Sickness Rate_DE"
Grupo 4: se llama "FR" y las hojas asociadas se llaman: "Summary_FR", "Totals_FR", "Averages_FR", "Sickness Rate_FR"
Grupo 5: se llama "ES" y las hojas asociadas se llaman: "Summary_ES", "Totals_ES", "Averages_ES", "Sickness Rate_ES"
Grupo 6: se llama "NL" y las hojas asociadas se llaman: "Summary_NL", "Totals_NL", "Averages_NL", "Sickness Rate_NL"
Grupo 7: se llama "Nordics" y las hojas asociadas se llaman: "Summary_Nrds", "Totals_Nrds", "Averages_Nrds", "Sickness Rate_Nrds"

- El codigo que se ejecuta al pinchar cada boton es muy simple.
Si pincho en el de UK, la macro lo que hace es hacer visibles las cuatro pesta#as de UK. [...]
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida