¿Cómo puedo vincular un cuadro de lista o cuadro combinado a una hoja?

Necesito asociar cuando seleccione la opción en el cuadro de lista o cuadro combinado me lleve a esa hoja . La idea es tener varias hojas y para cada hoja una opción y me lleve. No tengo claro cuál de las dos listas desplegables me sirve más.

1 Respuesta

Respuesta
1

H o l a:

Esta es una opción, para que en un Menú de excel, se carguen todas tus hojas y puedas seleccionar la hoja a la que quieres ir:

Para crear la pestaña y se carguen las hojas, ejecuta la siguiente macro.

Pon la 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

También pon la siguiente macro en el mismo módulo:

Sub Irahoja()
'Por.Dante Amor
    Application.ScreenUpdating = False
    With CommandBars.ActionControl
        h = .List(.ListIndex)
    End With
    Sheets(h).Select
End Sub

Después, selecciona la pestaña "Complementos y ahí selecciona del combo la hoja que quieres.


Para quitar el menú, ejecuta la siguiente macro:

Sub QuitarMenu()
'Por.Dante Amor
    On Error Resume Next
    CommandBars("Menu de hojas").Delete
End Sub

:)
;) 

¡Gracias! dante, pero la barra de complementos me aparece en todos los libros de excel que abro, los códigos que me enviaste los asocio a un botón e ingreso el código. Por ejemplo, hago click en ir a hoja 1 y me arroja el error :No se puede tener acceso al archivo. Intente lo siguiente. Me salen 4 sugerencias

Tal vez sea la versión de tu office.

Para quitar la barra, ejecuta la siguiente macro:

Sub QuitarMenu()
'Por.Dante Amor
    On Error Resume Next
    CommandBars("Menu de hojas").Delete
End Sub

Te anexo otra opción con lista de validación. Pon la siguiente macro en los eventos de ThisWorkbook, guarda el archivo y ejecuta la macro "SeleccionarHojas".

Al principio de las macros estoy declarando la variable celda, cambia en la macro "D5" por la celda en la que quieras que se cree la lista de validación; cuando ejecutes la macro, la lista de validación se creará en todas las hojas conteniendo el nombre de todas las hojas.


Private Const celda = "D5"
'
Private Sub Workbook_NewSheet(ByVal Sh As Object)
'Por.Dante Amor
    SeleccionarHojas
End Sub
'
Private Sub Workbook_Open()
'Por.Dante Amor
    SeleccionarHojas
End Sub
'
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Address(False, False) = celda Then
        If Target.Value = "" Then Exit Sub
        For Each h In Sheets
            If UCase(h.Name) = UCase(Target.Value) Then
                existe = True
                Exit For
            End If
        Next
        If existe Then
            Sheets(Target.Value).Select
            Range(celda).Value = ""
        Else
            MsgBox "La hoja ya no existe, se actualizarán los nombres", vbCritical, "ERROR"
            Target.Value = ""
            SeleccionarHojas
        End If
    End If
End Sub
'
Sub SeleccionarHojas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    activa = ActiveSheet.Name
    For Each h In Sheets
        cad = cad & h.Name & ","
    Next
    cad = Left(cad, Len(cad) - 1)
    '
    For Each h In Sheets
        h.Select
        With Range(celda).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:=cad
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = "Nombre de hoja incorrecto"
            .InputMessage = ""
            .ErrorMessage = "Solamente se permiten nombres de hoja"
            .ShowInput = True
            .ShowError = True
        End With
    Next
    Sheets(activa).Select
    Application.ScreenUpdating = True
End Sub

[code]:)
Saludos. Dante Amor. Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas