Macro Para Ocultar Hojas excel y abrirlas con comboBox

Dante

Ante todo u gran saludo a tu persona y por la gran ayuda que nos brindas en el foro, hiendo con mi pregunta. Tengo 30 hojas excel activas en las que ingreso datos, lo que necesito con este tema es que se pueda ocultar las hojas y solo me muestre una y con un combobox pueda abrir la hoja que elija.

1 respuesta

Respuesta
2

Con esta opción se cargan todas las hojas en un combobox control-activex.

OPCIÓN 1.

Primero, debes tener una hoja llamada "principal" para poner el combobox. Siempre estará visible la hoja "principal" y la hoja que selecciones.

Segundo, en la hoja "principal", debes crear el combobox control-activex

Pon la siguiente macro en los eventos de workbook.

Private Sub Workbook_NewSheet(ByVal Sh As Object)
'Por.Dante Amor
    cargarhojas
End Sub
Private Sub Workbook_Open()
'Por.Dante Amor
    cargarhojas
End Sub
Sub cargarhojas()
'Por.Dante Amor
    Sheets("principal").ComboBox1.Clear
    For Each hoja In Sheets
        If hoja.Name <> "principal" Then
            Sheets("principal").ComboBox1.AddItem hoja.Name
        End If
    Next
End Sub

Instrucciones para poner la macro en ThisWorkbook

  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 ThisWorkbook
  4. Del lado derecho copia la macro

Pon la siguiente macro en los eventos de la hoja "principal"

Private Sub ComboBox1_Change()
'Por.Dante Amor
    Application.ScreenUpdating = False
    For Each hoja In Sheets
        If hoja.Name <> "principal" Then
            hoja.Visible = False
        End If
        If hoja.Name = ComboBox1 Then
            hoja.Visible = True
        End If
    Next
    Sheets(ComboBox1.Value).Select
End Sub

Sigue las Instrucciones para poner la macro en 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(Principal)
  4. Del lado derecho copia la macro

Para ocultar las hojas y seleccionar una hoja, ve a la hoja principal y selecciona la hoja del combobox


Si no quieres manejar una hoja "principal", puedes utilizar esta opción:

OPCIÓN 2.

Pon la siguiente macro en un módulo:

Sub Crearmenu()
'Por.Dante Amor
    Dim Hoja As Worksheet
    On Error Resume Next
    CommandBars("Menu de hojas").Delete
    With CommandBars.Add(Name:="Menu de hojas")
        With .Controls.Add(Type:=msoControlDropdown)
            For Each Hoja In Worksheets
                .AddItem Hoja.Name
                .OnAction = "Irahoja"
                .TooltipText = "Seleccione hoja"
            Next
        End With
        .Visible = True
    End With
End Sub

Ejecuta la macro anterior. Lo que te hace es crear una cinta llamada "Complementos" (un nuevo menú) .

En esa cinta vas a encontrar un "combobox" con las hojas del libro.


Ahora pon la siguiente macro en otro módulo o en el mismo módulo:

Sub Irahoja()
'Por.Dante Amor
    Application.ScreenUpdating = False
    With CommandBars.ActionControl
        h = .List(.ListIndex)
    End With
    Sheets(h).Visible = True
    For Each Hoja In Sheets
        If Hoja.Name <> h Then
            Hoja.Visible = False
        End If
    Next
End Sub


Entra a la cinta "complementos", selecciona una hoja del "combobox".

Saludos. Dante Amor

Recuerda valorar la respuesta.

Hola! Dante 

Gracias por las macros, lo implemente a mi archivo  y exactamente es casi lo que busco, lo mas indicado seria que te envié mi archivo para las modificaciones. Te comento que e agregado textbox a cada hoja de mi archivo lo cual visualiza las hojas pero no oculta, lo que busco con este tema es poder abrir solo una  hoja con el combobox y mas no teniendo abierta una hoja principal.

SI no quieres la hoja principal, entonces utiliza la opción2. Pero con la opción 2 deberás modificar el menú de excel y ese menú te aparecerá en todos los archivos que utilices.

Si no quieres la hoja principal, pero quieres la opción 1, tendrás que poner le combo en todas las hojas, para que desde cualquier hoja puedas llamar a otra hoja.

Lo que no entendí, es para qué pusiste un textbox en cada hoja.

Si quieres que adapte el código a tu archivo, deberás decirme cuál opción es la que necesitas.

Todo quedó reducido a una macro.

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
'Por.Dante Amor
    Application.ScreenUpdating = False
    On Error Resume Next
    hoja = ActiveSheet.ComboBox1.Value
    If hoja = "" Then Exit Sub
    Application.EnableEvents = False
    Sheets(hoja).Visible = True
    Sheets(hoja).ComboBox1.Clear
    For Each h In Sheets
        Sheets(hoja).ComboBox1.AddItem h.Name
        Sheets(hoja).ComboBox1.LinkedCell = "CZ1"
    Next
    Sheets(hoja).ComboBox1 = ""
    On Error GoTo 0
    For Each h In Sheets
        lahoja = h.Name
        If h.Name <> hoja Then
            h.Visible = False
        End If
    Next
    Application.EnableEvents = True
End Sub

La macro la puse en los eventos de workbook.

Borré todas las macros que tenías en cada hoja.

NO se puede utilizar la macro en las hojas "GRAFICOS" y "LECTURAS", porque las tienes protegidas, la solución es que en la misma macro las desprotejas y al finalizar la macro las vuelvas a proteger. Puedes ir a cualquiera de estas hojas, solamente tienes que mostrarla, pero desde los combos tendrías que desprotegerlas.

Deberás tener el combobox1 en todas las hojas, para que de esta forma puedas moverte a otra hoja.

Te envié el archivo con la opción2, solamente puse las macro que ya te había enviado y funciona mucho mejor que la opción1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas