¿Cómo puedo mostrar una hoja de excel por medio de un ComboBox y mantener ocultas las demás hojas? (DAM)

Buenos y fríos días maestro Dante:

Le saludo afectuosamente, esperando que goce de muy buena salud y al mismo tiempo le solicito amablemente su ayuda para resolver un pequeño inconveniente que tengo con un UF y se trata de lo siguiente:

He credo un UF el cual he programado para que aparesca al momento de abrir y oculte el libro de trababajo, el UF contiene un textbox y un combobox, para habilitar y hacer visible el combobox se debe escribir una contraseña en el cuadro de textbox y al elegir una hoja en combo hace visible el workbook y me traslada a la hoja seleccionada, pero me muestra todas las hojas.

El problema es que no quiero que todas las hojas sean visibles, únicamente se debe mostrar la hoja selecionada.

Tampoco quiero que los usuarios las hagan visibles por medio de las opciones avanzadas de excel, de hecho quiero deshabilitar esta opción para que solo se puedan mostrar por medio del UF.

Anexo el código del evento para que usted me indique lo que tengo que hacer para mostrar solo la hoja deseada.

'Private Sub ComboBox1_Click()
'Unload Me
'Application.Visible = True
'Sheets(ComboBox1.Value).Select

'End Sub

1 Respuesta

Respuesta
1

tú que tal, ¿Cómo te encuentras?

Para que todo funcione como lo necesitas, se requieren realizar lo siguiente:

1. Cuando cierras el libro, todas las hojas deberán ocultarse con veryhidden

2. Solamente una hoja deberá estar visible, puede ser una hoja de menú

3. Cuando selecciones una hoja en el combo, se debe hacer visible la hoja seleccionada y ocultar la hoja "menú", en ese orden.

Pon la siguiente macro en los eventos de thisworkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Por.Dante Amor
    OcultarHojas
    ActiveWorkbook.Save
End Sub
Private Sub Workbook_Open()
    UserForm1.Show
End Sub

Pon lo siguiente en un módulo:

Sub OcultarHojas()
'Por.Dante Amor
    Sheets("menu").Visible = True
    For Each h In Sheets
        If h.Name <> "menu" Then
            h.Visible = xlVeryHidden
        End If
    Next
End Sub

En tu formulario:

Private Sub ComboBox1_Change()
'Por.Dante Amor
    Application.ScreenUpdating = False
    OcultarHojas
    hoja = ComboBox1
    Application.Visible = True
    Sheets(hoja).Visible = True
    Sheets("menu").Visible = False
    Unload Me
End Sub
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = 0
End Sub
Private Sub UserForm_Activate()
    For Each h In Sheets
        ComboBox1.AddItem h.Name
    Next
End Sub

Te anexo mi archivo para que veas el funcionamiento, no tiene password y la aplicación siempre está visible para que realices tus pruebas.

https://www.dropbox.com/s/2j2nukywgafeo1l/oculta%20hoja%20y%20abre%20form.xlsm?dl=0 


Tengo mucho frío pero estoy bien, gracias maestro Dante:

Su ejemplo funciona bien, pero en mi caso el menu principal lo tengo diseñado en un UF y al activarlo oculta el excel todo el tiempo, ya que los usuarios solo interactúan con la información por medio de UserForms.

Ocasionalmente yo como administrador, he tenido la necesidad de ir a una hoja en particular para agregar o modificar algún encabezado o imagen, o simplemente para mostrar los datos de origen.

Razón por la que no puedo dejar la aplicación visible.

Oriénteme por favor qué otra opción existe.

Muchas gracias por su ayuda.

Solamente adapta las macros que te envié a lo que tienes. Lo único que me falta es hacer invisible la aplicación.

Pero las hojas siempre están ocultas, pero tienes que dejar al menos una visible, eso es una limitación de excel.

Sigue probando con lo que te envié, revisa cómo está estructurado y organizado para que sigas esa línea y logres lo que necesitas.

Por último, puedes ocultar la aplicación y simplemente dejar visible una hoja.

Por otra parte no es necesario que dejes visible ninguna de las hojas, simplemente corrige el código, por ejemplo si tienes esto:

sheets("Hoja2").select

activesheet.range("A1") =  textbox1

cambia por esto

sheets("Hoja2").range("A12) = textbox

Lo que estoy haciendo es, en lugar de cambiarme de hoja, simplemente estoy haciendo referencia a la hoja y a la celda donde quiero escribir.


No te estoy pidiendo que quites el menú de tu userform, sigue usando ese UF.

Saludos. Dante Amor

Si tienes dudas de cómo adaptar el código, envíame tu archivo.

Recuerda poner tu nombre de usuario en el asunto

¡Listo!, he adaptado el código y ya puedo ir a la hoja deseada desde mi subform sin mostrar las demás, también he observado que las opciones avanzadas de excel para mostrar todas las hojas ya no funcionan.

Misión cumplida

 ¡Gracias! maestro Dante.

 ¡Buen provecho!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas