Problemas con condicionales dentro de otro condicional

Actualmente estoy trabajando en con código cuya idea es que según el nombre que el usuario seleccione de una lista desplegable el programa lo buscara en una base de datos y debajo de ese nombre agregara las filas vacías que pida el usuario, este es código y el problema es que cada vez que lo ejecuto me dice que hay un "Next" sin "For", pero eso no es cierto así que me supongo que estoy cerrando mal los condicionales, si me pudieran ayudar corrigiendo el código lo agradecería mucho

Private Sub cmdnins_Click()
Dim nfilas As Long
If cbxsubc.Index = -1 Then
    MsgBox "Primero debes seleccionar un Subcapitulo"
    Exit Sub
End If
Set hj = Sheets("BDusuario (2)")
Set b = hj.Columns("C").Find(cbxsubc.Value, look:=xlWhole)
If Not b Is Nothing Then
    Fila = b.Row
    codigo = b.Offset(0, -2)
    codigo = hj.Cells(Fila, "A").Value
    For i = 99 To Range("BDusuario1").Rows.Count
        ac = ActiveCell.Value
        x = ac + 1
        cc = ac.Offset(1, 0)
            If ac <> cc Then
                nfilas = Application.InputBox(Prompt:="¿Cuantos Insumos desea Ingresar?", Type:=1)
                If nfilas > 0 Then
                    Rows(ActiveCell.Row & ":" & ActiveCell.Row + nfilas - 1).Insert
                End If
            Else
    Next i
            End If
Else
    MsgBox "Subcapitulo no Valido"
End If
End Sub

1 respuesta

Respuesta
1

[Hola

Por si acaso ese mensaje es "general" y ocurre cuando hay un bucle sin cerrar o con algún tipo de problema similar. Si vuelves a revisar tu macro verás que hay un "Else" y un "End If" que no tienen su correspondiente "If", he ahí la cuestión.

Abraham Valencia

La verdad no logro ver cuales son el "Else" y el "End If" que me dices, así es como estoy abriendo y cerrando los condicionales, no logro ver el error...

[Hola

Ya, para que se entienda mejor, literal tienes un "For" que no encuentra a su "Next".

En las estructuras "If - Else - End If", para que aquello que está posterior al "Else" se cumpla/ejecute, debe ocurrir algo distinto a la condición del "If", entonces si tienes un "next" entre el "Else" y el "En If", ese "For" no lo va a "encontrar"

Abraham Valencia

Debo suponer entonces que debo mover el Next justo debajo del End if y Arriba del Else que tiene el MsgBox, es decir, de esta forma

Private Sub cmdnins_Click()
Dim nfilas As Long
If cbxsubc.Index = -1 Then
    MsgBox "Primero debes seleccionar un Subcapitulo"
    Exit Sub
End If
Set hj = Sheets("BDusuario (2)")
Set b = hj.Columns("C").Find(cbxsubc.Value, look:=xlWhole)
If Not b Is Nothing Then
    Fila = b.Row
    codigo = b.Offset(0, -2)
    codigo = hj.Cells(Fila, "A").Value
    For i = 99 To Range("BDusuario1").Rows.Count
        ac = ActiveCell.Value
        x = ac + 1
        cc = ac.Offset(1, 0)
            If ac <> cc Then
                nfilas = Application.InputBox(Prompt:="¿Cuantos Insumos desea Ingresar?", Type:=1)
                If nfilas > 0 Then
                    Rows(ActiveCell.Row & ":" & ActiveCell.Row + nfilas - 1).Insert
                End If
            Else
            End If
    Next i
Else
    MsgBox "Subcapitulo no Valido"
End If
End Sub

O causaría el mismo problema?

Prueba y comentas

Abraham Valencia

Estuve probando y supongo que ahora funciona, pero ahora me arroja el problema "424" diciendo que se requiere un objeto, y el depurador me dice que el error esta en la línea

If cbxsubc.Index = -1 Then

¿Existe un objeto llamado "cbxsubc"? De existir ¿es un "Combobox"? Los "Combobox" no tienen una propiedad llamada "Index" ¿no será que quisiste usar "ListIndex"?

Abraham Valencia

Se arregla un problema y sale uno nuevo... ahora me dice error '428' No se encontró el argumento con nombre, y parece que el problema esta en la línea

Set b = hj.Columns("C").Find(cbxsubc.Value, look:=xlWhole)

Perdón, es el error 448

Aparentemente no encontró el valor buscado tu "Find" y debes haber cambiado más cosas porque teóricamente uno de tus "Else" debería enviar un "MsgBox" al ocurrir eso.

Disculpa la pregunta pero ¿has solo copiado/pegado esa macro o la hiciste tú? De ser lo primero, debes verificar y adaptar a tus necesidades, verificar los nombres de objetos (hojas, rangos, etc.) y los bucles o de lo contrario te dará uno y otro error.

Abraham Valencia

Es raro, ya que lo esta buscando en la hoja y en la columna que debe... Si, el código lo hice yo aunque siendo honesta no estoy segura si al menos hará lo que en principio quiero que haga y con tanto error sigo son saberlo

Es bueno que tú lo hayas hecho pero es más importante saber con certeza que hace cada instrucción, en programación lo intuitivo no es muy efectivo.

Sugiero que vuelvas a revisar línea por línea, bucle por bucle y objeto por objeto y te asegures que el tipo de datos coincide con los que necesitas. Además, una vez hecho ya si los problemas de fondo siguen y no terminas de entenderlos, regresa por aquí.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas