Combo con nombres de hojas

11/03/2005 - 14:06 por José Luis | Informe spam
A ver si me podeis ayudar. Tengo un libro con más de 20 hojas y necesito
hacer un cuadro combinado que me recoja los nombres de las hojas ordenadas
alfabéticamente, y al seleccionar una me vaya directamente a esa hoja.
Una cosa más: las dos primeras hojas son "Inicio" y "Global"... y esas no
deberían aparecer en el combo.

¿Esto es posible? Por más que he mirado en Google y en el grupo, no he
encontrado nada.
Gracias de antemano
 

Leer las respuestas

#1 KL
11/03/2005 - 16:38 | Informe spam
Hola Jose Luis,

"José Luis" wrote in message
news:
A ver si me podeis ayudar. Tengo un libro con más de 20 hojas y necesito
hacer un cuadro combinado que me recoja los nombres de las hojas ordenadas
alfabéticamente, y al seleccionar una me vaya directamente a esa hoja.
Una cosa más: las dos primeras hojas son "Inicio" y "Global"... y esas no
deberían aparecer en el combo.

¿Esto es posible? Por más que he mirado en Google y en el grupo, no he
encontrado nada.
Gracias de antemano



Si que es posible. A continuacion te pongo una serie de macros q llenaran la
lista de validacion de la celda [A1] de la hoja "Hoja1" con los nombres de
todas las hojas del libro menos la 1a y la 2a ordenados alfabeticamente, y,
al seleccionar una de las opciones, activaran la hoja q tenga el nombre
seleccionado. La pregunta del millon es: ?A q evento puedo asociar la
actualizacion de la lista para q me tome en cuenta en tiempo real los
posibles cambios de nombre de hoja e insercion de nuevas hojas? Lo segundo
es facil y se consigue usando el evento Workbook_NewSheet. La solucion para
lo primero es mas compleja - consulta este enlace: http://tinyurl.com/6koh8
(ojo, leelo atentamente hasta el final - es q incluso los "Monstruos de
Excel" como Laurent Longre se equivocan a veces).

Saludos,
KL

'Inicio Codigo (Modulo1)
Sub Actualizar_Combo()
Dim Lista As New Collection
Dim Opciones As String
Dim hoja As Long
Dim i As Long, j As Long
Dim Swap1, Swap2

On Error Resume Next
With ThisWorkbook
For hoja = 3 To .Sheets.Count
Lista.Add .Sheets(hoja).Name, .Sheets(hoja).Name
Next hoja
On Error GoTo 0
For i = 1 To Lista.Count - 1
For j = i + 1 To Lista.Count
If Lista(i) > Lista(j) Then
Swap1 = Lista(i)
Swap2 = Lista(j)
Lista.Add Swap1, before:=j
Lista.Add Swap2, before:=i
Lista.Remove i + 1
Lista.Remove j + 1
End If
Next j
Next i

For i = 1 To Lista.Count
If Opciones <> "" Then Opciones = Opciones & ","
Opciones = Opciones & Lista(i)
Next i

With .Sheets("Hoja1").Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=Opciones
End With
End With
End Sub
'Fin Codigo (Modulo1)

'Inicio Codigo (Modulo de la "Hoja1")
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim hoja As Object
If Intersect(Target, Me.Range("A1")) Is Nothing Then Exit Sub
On Error Resume Next
Set hoja = ThisWorkbook.Sheets(Me.Range("A1").Value)
On Error GoTo 0
If Not hoja Is Nothing Then
If hoja.Visible = True Then
Call Actualizar_Combo
hoja.Activate
Else
MsgBox "La hoja " & hoja.Name & " esta oculta" _
& " y no puede ser activada."
End If
Else
MsgBox "La hoja " & Range("A1").Value & " no existe" _
& " en este libro."
Call Actualizar_Combo
End If
End Sub
'Fin Codigo (Modulo de la "Hoja1")


'Inicio Codigo (Modulo EsteLibro/ThisWorkbook)
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Call Actualizar_Combo
End Sub

Private Sub Workbook_Open()
Call Actualizar_Combo
End Sub
'Fin Codigo (Modulo EsteLibro/ThisWorkbook)

Preguntas similares