Seleccionar de una lista la hoja a la que ir

Mi consulta es como crear una lista desplegable con nombres de las hojas del libro, en la lista selecciono el nombre y seleccionándolo debo ir a su hoja
He visto esto pero no se como hacerlo:
Sub Crearmenu()
Dim Hoja As Worksheet
On Error Resume Next
CommandBars("Menu de hojas").Delete
With CommandBars.Add(Name:="Menu de hojas")
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Abraham"
.FaceId = 59
.TooltipText = "Acerca de..."
End With
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
Sub Irahoja()
Dim strnombrehoja$
With CommandBars.ActionControl
strnombrehoja$ = .List(.ListIndex)
End With
Sheets(strnombrehoja$).Select
End Sub
Lo he probado pero con la de abajo me sale:
Se ha producido el error '91' en tiempo de ejecución: Variable del objeto o bloque with no establecido.
Si alguien me puede echar una mano.
Gracias

1 Respuesta

Respuesta
1
Revisa este código a ver si te sirve
Este macro recorre todas las hojas del libro y crea hiperviculos a ellos
Sub Links_hojas()
Dim wrbLibro As Workbook
Dim wrsHojaActiva As Worksheet, wsHoja As Worksheet
Dim intFila, intColumna As Integer
Set wrbLibro = ActiveWorkbook
Set wrsHojaActiva = ActiveSheet
intFila = 4
intColumna = 1
For Each wsHoja In wrbLibro.Worksheets
If wsHoja.Name <> wrsHojaActiva.Name Then
wrsHojaActiva.Hyperlinks.Add wrsHojaActiva.Cells(intFila, intColumna), _
"", SubAddress:="'" & wsHoja.Name & "'!A1", TextToDisplay:=wsHoja.Name
intFila = intFila + 1
End If
ProxHoja:
Next wsHoja
End Sub
Te comento que probé el código completo que tienes y funciona. Testeado en 2010
Sub Crearmenu()
Dim Hoja As Worksheet
On Error Resume Next
CommandBars("Menu de hojas").Delete
With CommandBars.Add(Name:="Menu de hojas")
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Abraham"
.FaceId = 59
.TooltipText = "Acerca de..."
End With
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
Sub Irahoja()
Dim strnombrehoja$
With CommandBars.ActionControl
strnombrehoja$ = .List(.ListIndex)
End With
Sheets(strnombrehoja$).Select
End Sub
Sub Abraham()
MsgBox "Hay que leer sobre VBA", vbInformation + vbOKOnly, "Abraham Valencia"
End Sub
Te crea un menu en la barra de menúes de Excel en la grupo de complementos donde puedes seleccionar la hoja a donde deseas ir.
Con la primera respuesta, creo un módulo con esa rutina, le asocio un botón y no parece que haga nada.
Indícame si tengo que hacerlo de alguna otra forma.
Con la segunda respuesta, es verdad, lo crea en la barra de herramientas, pero ¿habría alguna forma de modificar la rutina para que al pulsar el botón saliera el desplegable?
Gracias.
Me deja solo abrirlo como lectura y no ejecuta macros pero no pasa nada.
Al final si que me crea los hipervínculos pero, necesito poder ocultarlo para que no salga en la impresión del documento. Con los botones no hay ningún problema porque te permite la opción de no imprimirlo pero con los hipervínculos ¿hay alguna forma de que no salga en la impresión? A lo mejor la solución es que los cree dentro de un cuadro de texto o algo.
A ver si podemos conseguir esto o lo que te pregunté anteriormente, que con la otra rutina en lugar de crear la lista desplegable en la barra de herramientas, que lo creara al lado del botón.
Un saludo,
Podrías establecer tu área de impresión y colocar que se genere la lista fuera de ella. Esto tratando de que los links se muestre en un form pero no logro dar. Dejame seguir probando y cualquier cosa de tecribo.

Añade tu respuesta

Haz clic para o