Error de compilación:"Next sin For"

Perdona que vuelva a "molestarte"... Como siempre, antes de hacer una consulta, hago una visita a las respuestas en la web de todoexpertos, y intento que "funcione", aunque no es fácil... Te comento, he encontrado el siguiente código:
Private Sub UserForm_Activate()
Dim SheetData() As String
Dim ShtCnt As Integer
Dim ShtNum As Integer
Dim Sht As Object
Dim ListPos As Integer
Set OriginalSheet = ActiveSheet
ShtCnt = ActiveWorkbook.Sheets.Count
ReDim SheetData(1 To ShtCnt, 1 To 4)
ShtNum = 1
For Each Sht In ActiveWorkbook.Sheets
If Sht.Name = ActiveSheet.Name Then
ListPos = ShtNum - 1
SheetData(ShtNum, 1) = Sht.Name
Select Case TypeName(Sht)
Case "hoja de trabajo"
SheetData(ShtNum, 2) = "Hoja"
SheetData(ShtNum, 3) = "N/A"
Application.CountA (Sht.Cells)
Case "Chart"
SheetData(ShtNum, 2) = "Grafico"
SheetData(ShtNum, 3) = "N/A"
Case "DialogSheet"
SheetData(ShtNum, 2) = "Dialogo"
SheetData(ShtNum, 3) = "N/A"
End Select
If Sht.Visible Then
SheetData(ShtNum, 4) = "Verdadero"
Else
SheetData(ShtNum, 4) = "Falso"
End If
ShtNum = ShtNum + 1
Next Sht
With ListBox1
.ColumnWidths = "100 pt;30 pt;40 pt;50 pt"
.List = SheetData
.ListIndex = ListPos
End With
End Sub
El código anterior, literalmente, lo he pegado a mi archivo excel y me da error de compilación: Next sin for (negrita en el código)
La idea que tengo y basándome en el código anterior es:
Tengo un libro excel "Programa gestion ambiental" que tiene bastantes hojas: Hoja1=Registro, Hoja2=Objetivo1, Hoja3=Objetivo2,.......entonces a partir del codigo anterior, si es posible? Y utilizando la nomenclatura del objetivo (TIPO: XX-YY, donde XX son números correlativos y YY hace referencia al año, ¿por ejemplo 08 seria 2008) desde la Hoja1="Registro" me direccione a la hoja del objetivo XX? Seria mejor utilizar en este caso un combobox, antes que un listbox (como describe el código anterior), ¿para la búsqueda?

1 respuesta

Respuesta
1
No entiendo bien. ¿Quieres pasarte a otra hoja con solo seleccionar el año o escogerla entre un grupo?
Hola jcgonzalez, la idea es escogerla ("la hoja") entre un grupo a partir de un combobox (en la hoja "Registro") que se iría llenando (tendría una lista) con cada uno de los objetivos... En el libro que estoy "batallando" tengo descritos 6 objetivos para el año 2008, es decir, tengo 6 hojas, una para cada objetivo, luego a partir del combobox en la hoja "Registro" al "picar" el objetivo 1 del año 2008 (nomenclatura 01-08), por ejemplo, que me direccione a la hoja del objetivo 1(nº:01-08), y así para cada uno...
El que no se, si es necesario que las hojas ("pestañas") de los objetivos ( han de tener el mismo nombre que el objetivo... me explico, la idea es seguir una nomenclatura para cada objetivo del tipo XX-YY, donde XX serian números correlativos empezando por 01, 02... y YY seria el año, así 08 correspondería al año 2008 y sucesivamente... ¿luego la "pestaña" para el objetivo XX-YY debería identificarse como XX-YY?
La verdad es que soy muy "novato" en todo esto, pero he de mejorar... y ahora dispongo de tiempo!
De nuevo gracias por tu ayuda... y tiempo!
Un abrazo
Sería mejor meter los nombres de las hojas en un ListBox y luego con solo seleccionar una pasarse a ella.
Private Sub UserForm_Initialize()
Dim SheetData() As String
Dim ShtCnt As Integer
Dim ShtNum As Integer
Dim Sht As Object
Dim ListPos As Integer
Set OriginalSheet = ActiveSheet
ShtCnt = ActiveWorkbook.Sheets.Count
ReDim SheetData(1 To ShtCnt, 1 To 4)
ShtNum = 1
For Each Sht In ActiveWorkbook.Sheets
If Sht.Name = ActiveSheet.Name Then _
ListPos = ShtNum - 1
SheetData(ShtNum, 1) = Sht.Name
Select Case TypeName(Sht)
Case "Hoja de trabajo"
SheetData(ShtNum, 2) = "Hoja"
SheetData(ShtNum, 3) = _
Application.CountA(Sht.Cells)
Case "Chart"
SheetData(ShtNum, 2) = "Gráfico"
SheetData(ShtNum, 3) = "N/A"
Case "DialogSheet"
SheetData(ShtNum, 2) = "Diálogo"
SheetData(ShtNum, 3) = "N/A"
End Select
If Sht.Visible Then
SheetData(ShtNum, 4) = "Verdadero"
Else
SheetData(ShtNum, 4) = "Falso"
End If
ShtNum = ShtNum + 1
Next Sht
With ListBox1
.ColumnWidths = "100 pt;30 pt;40 pt;50 pt"
.List = SheetData
.ListIndex = ListPos
End With
End Sub
Private Sub CancelButton_Click()
OriginalSheet.Activate
Unload Me
End Sub
Private Sub cbPreview_Click()
If cbPreview Then Sheets(ListBox1.Value).Activate
End Sub
Private Sub ListBox1_Click()
If cbPreview Then _
Sheets(ListBox1.Value).Activate
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call OKButton_Click
End Sub
Private Sub OKButton_Click()
Dim UserSheet As Object
Set UserSheet = Sheets(ListBox1.Value)
If UserSheet.Visible Then
UserSheet.Activate
Else
If MsgBox("¿Hoja oculta?", _
vbQuestion + vbYesNoCancel) = vbYes Then
UserSheet.Visible = True
UserSheet.Activate
Else
OriginalSheet.Activate
End If
End If
Unload Me
End Sub
Este ejemplo tiene un ListBox, dos CommandButton y un CheckBox.
Adáptalo.
Hola JCGonzalez, perdona la demora en dar "señales", pero llevo desde ayer por la noche "batallando" con el megacodigo... La verdad es que a partir de un useform con un solo listbox1 y haciendo doble click me direcciono a la hoja... pero me quedan bastantes interrogantes del código:
La búsqueda de las hojas se puede hacer con ENTER, ¿en vez de doble click? ¿Aquí entran en juego los commandbutton?
¿El Checkbox que función tiene? ¿Si no tuviese ninguna función que elimino del código?
En el codigo aparece instruccion MsgBox, tambien que funcion tiene?
Esta pregunto que te voy formular ahora creo que debería abrir otra consulta, seguramente, ahí va: se pueden ocultar las hojas excepto hoja "registro", la principal para entendernos, ¿y qué se hagan visibles cuando se haga la búsqueda a partir del listbox?
¿Agradeciendo tu/s respuesta/s y esperando que no sea la ultima... o no?... es broma!
Un saludo y gracias!
Me parece que fui muy específico con mi anterior respuesta. Tienes que adaptar el código a tus necesidades. Como puedes leer, incluye un Commandbutton llamado CheckBox, que si está activado me lleva a la hoja seleccionada. Tienes que aprender a leer códigos.
Si se pueden ocultar las hojas que quieras. Investiga en la ayuda del VBE.
Hola jcgonzalez, perdona ante todo por la demora en finalizar. Solo añadir que gracias por el código, hay cosas que "llego" y otras no, pero "funciona"!... Si surgen dudas, casi seguro!, espero contar con tu apoyo... ¿o no?.. es broooma!
Un saludo y gracias, como siempre!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas