Como ocultar y luego mostrar solamente la hoja activa

Tengo una planilla excel con varias hojas, MENU, PROVEEDORES, PRODUCTOS, CASINOS, EMPRESAS y quiero que estando en MENU que es la hoja principal y a través de botones me lleve a las distintas hojas por ejemplo a PRODUCTOS, pero que las otras queden ocultas y que una vez que haga modificaciones en PRODUCTOS, pueda volver a MENU y las otras hojas sigan ocultas. Y así si quiero ir a CASINOS, solamente esta quede activa y las demás ocultas, y al volver a MENU nuevamente se oculten. Agradecido por su respuesta y

1 respuesta

Respuesta
1

.03/11/16

Buenos días, Mauricio

En un Módulo de Visual Basic, pega las siguientes rutinas:

Sub SelMENU()
LaHoja = "MENU"
Call MuestraH(LaHoja)
End Sub
Sub SelPROV()
LaHoja = "PROVEEDORES"
Call MuestraH(LaHoja)
End Sub
Sub SelPROD()
LaHoja = "PRODUCTOS"
Call MuestraH(LaHoja)
End Sub
Sub SelCASI()
LaHoja = "CASINOS"
Call MuestraH(LaHoja)
End Sub
Sub SelEMPR()
LaHoja = "EMPRESAS"
Call MuestraH(LaHoja)
End Sub
'---------------------------------------------------
Private Sub MuestraH(LH)
For Each hoja In Sheets()
    If UCase(hoja.Name) = UCase(LH) Then
        hoja.Visible = True
    Else
        hoja.Visible = False
    End If
Next
End Sub

Como verás, hay una rutina por cada hoja para que puedas asociarla a cada botón.

Todas ellas llaman a una misma subrutina que se encarga de dejar visible sólo la hoja del botón presionado.

Espero que sea de tu entera satisfacción.

Un abrazo

Fer

.

Hola Fejoal y gracias por responder a mi consulta y perdón por no responder antes, pero he tenido mucho trabajo y justamente lo solicitado me sirve mucho.  Apliqué lo enviado pero me quedan dudas.  La idea es que mi hoja llamada MENU que hace de hoja principal, en donde tendré botones para llamar a hoja PRODUCTOS, otro para PROVEEDORES, otro para CASINOS y otro para EMPRESAS.  Ahora cuando desde MENU presiono botón para ir por ejemplo a CASINOS pueda retornar a MENU también mediante un botón y desde acá poder elegir EMPRESAS y retornar a MENU.  Todo esto cada vez que voy a una de las hojas mencionadas, que las demás se oculten.  Por favor nuevamente tu ayuda.

.

Hola, Mauricio

Sí, así está desarrollado. Tal vez debería haberlo aclarado mejor.

Lo pensé para que coloques los botones en la hoja de menú Y en cada hoja donde vayas.

Es decir, primero armas cada botón con su rutina asociada.

Luego copias esos botones, o sólo el que dice MENU, y los pegas en cada hoja.

(Yo pegaría todos, así de cualquier hoja puedo ir a la que desee).


Aparte, si algún día agregas una nueva hoja, bastará que le agregues una rutina más como esta:

Sub SelXXXx()
LaHoja = "XXXX" 'nombre de la nueva hoja
Call MuestraH(LaHoja)
End Sub

Reemplazas las X y asocias esta rutina a un nuevo botón.

Espero haber sido más claro ahora.

Un abrazo

Fer

.

Fer gracias nuevamente por responder esta segunda inquietud.  Seguí las instrucciones y me funciona en hoja MENU cree 4 botones PRODUCTOS, PROVEEDORES, CASINOS,EMPRESAS.  En cada una de ellas cree un botón de retornar a MENU y estos funcionan perfectamente.  Lo que me ocurre es que desde MENU al presionar botón me sale

"Se ha producido el error '1004' en tiempo de ejecución:

No se puede asignar la propiedad visible de la clase Worksheet.

Continuar     Finalizar     Depurar    Ayuda

al seleccionar DEPURAR me sale:

Private Sub MuestraH(LH)

For Each hoja In Sheets()
If UCase(hoja.Name) = UCase(LH) Then
hoja.Visible = True
Else
hoja.Visible = False=======> esta linea es donde se pone en amarillo                                                                 indicando error.
End If
Next
End Sub

Para probar he tenido que crear una hoja nueva y así me funcionan los botones, y como digo al retornar a MENU me funciona bien, y luego nuevamente al seleccionar otro botón ejemplo CASINOS me sale error y nuevamente debo crear una hoja en blanco y me permite ejecutar el botón.

.

Es curioso porque funcionó bien en las pruebas que hice.

Pero para evitar inconvenientes, te envío esta nueva versión, donde modifiqué la lógica de la función que mantiene visible sólo la hoja elegida.

Simplemente reemplaza el código anterior por el siguiente. Como sólo hice cambios en la subrutina puedes mantener los botones asociados a las macros originales.

Sub SelMENU()
LaHoja = "MENU"
Call MuestraH(LaHoja)
End Sub
Sub SelPROV()
LaHoja = "PROVEEDORES"
Call MuestraH(LaHoja)
End Sub
Sub SelPROD()
LaHoja = "PRODUCTOS"
Call MuestraH(LaHoja)
End Sub
Sub SelCASI()
LaHoja = "CASINOS"
Call MuestraH(LaHoja)
End Sub
Sub SelEMPR()
LaHoja = "EMPRESAS"
Call MuestraH(LaHoja)
End Sub
'---------------------------------------------------  
Private Sub MuestraH(LH)
Application.ScreenUpdating = False
For Each hoja In Sheets()
    hoja.Visible = True
Next
For Each hoja In Sheets()
    If UCase(hoja.Name) <> UCase(LH) Then hoja.Visible = False
Next
End Sub

Espero que ahora si te funcione.

Abrazo
Fer

.

Fer ahora siiiii¡¡¡¡  funcionando excelentemente.  Muchas gracias.

.

Muy bien, Mauricio!

Pudo ser que intentaba ocultar alguna hoja ya oculta... pero no sé.

Espero que no te haya afectado mucho el terremoto de hoy.

Abrazo

Fer

¡Gracias! todo bien estamos acostumbrados.  saludos

.

Y, más importante, preparados.

Abrazo

Fer

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas