Visual Basic - Problema en For Next

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Problema en For Next

Publicado por Antoñito Manuel (30 intervenciones) el 11/09/2014 20:03:12
Hola a todos:

Espero que me podáis ayudar, estoy haciendo un programa con bloques de números para grabarlo en Access 2010, en tabla de 2003 con Visual Basic 6.0, pero me encuentro con un comunicado que no me aclaro, que dice "Error en tiempo de ejecución: se requiere objeto.

Pongo el código por si veis el quid de la cuestión.
Gracias de antemano.


Dim ORDEN As Long
Dim Nº1 As Byte
Dim Nº2 As Byte
Dim Nº3 As Byte
Dim Nº4 As Byte
Dim Nº5 As Byte
Dim Cuenta As Long
Dim ORDEN2 As Long
Dim P1 As Byte
Dim P2 As Byte
Dim P3 As Byte
Dim P4 As Byte
Dim P5 As Byte
Dim ORDENBUCLE As Long
Dim ORDENBUCLE2 As Long
Dim Cantidad As Long
Dim Decremento As Long
Dim Incremento As Long
Dim Porcentaje1 As Single
Dim Porcentaje2 As Single
Dim Recordset As Adodc

Private Sub Fin_Click()
End
End Sub

Private Sub Inserta_Click()
Inserta.Enabled = False
Adodc1.Recordset.AddNew
ORDEN = 0
Cuenta = 0
' Cantidad es la cantidad de combinaciones del Bloque
Cantidad = 2542512
Decremento = Cantidad
Incremento = Cuenta

' Prepara para introducir Datos.
For Nº1 = 1 To 46
Label2.Caption = Nº1
DoEvents
For Nº2 = 2 To 47
If Nº2 > Nº1 Then
' Muestra los Números de la Col 2
Label3.Caption = Nº2
DoEvents
End If
For Nº3 = 3 To 48
If Nº3 > Nº2 And Nº2 > Nº1 Then
' Muestra los Números de la Col 3
Label4.Caption = Nº3
DoEvents
End If
For Nº4 = 4 To 49
If Nº4 > Nº3 And Nº3 > Nº2 And Nº2 > Nº1 Then
' Muestra los Números de la Col 4
Label5.Caption = Nº4
DoEvents
End If
For Nº5 = 5 To 50
If Nº5 > Nº4 And Nº4 > Nº3 And Nº3 > Nº2 And Nº2 > Nº1 Then
' Muestra los Números de la Col 5
Label6.Caption = Nº5
DoEvents
' ORDEN es el Contador de Registros
ORDEN = ORDEN + 1
' Muestra los Nºs. del Contador
Registr.Text = ORDEN
' Muestra el Contador Cuenta en Label8
Cuenta = Cuenta + 1
Label8.Caption = Cuenta
' Asigna los Nºs. de Columnas
text1.Text = Nº1
text2.Text = Nº2
text3.Text = Nº3
text4.Text = Nº4
text5.Text = Nº5
Porcentaje1 = (Cuenta * 100) / Cantidad
Porcentaje2 = 100 - Porcentaje1
Label9.Caption = Format(Porcentaje1, "#0.00") & " %"
Label10.Caption = Format(Porcentaje2, "#0.00") & " %"
Decremento = Decremento - 1
Label14.Caption = Decremento
Incremento = Incremento + 1
Label13.Caption = Incremento
DoEvents
Call Graba
End If


If Nº1 = 46 And Nº2 = 47 And Nº3 = 48 And Nº4 = 49 And Nº5 = 50 Then
MsgBox ("Por fin se ha llegado al Final de las Combinaciones.")
End
End If
' Prepara para introducir nuevos Datos.
Next Nº5
Next Nº4
Next Nº3
Next Nº2
Next Nº1

End Sub

Public Sub Graba()

With recorset
If Adodc1.Recordset.EOF And Adodc1.Recordset.BOF = False Then
MsgBox ("No hay Registros")
Adodc1.Recordset.MoveFirst

Else
Adodc1.Recordset.AddNew
Adodc1.Recordset.MoveLast
Adodc1.Recordset.Fields("ORDEN") = ORDEN
Adodc1.Recordset.Fields("Col1") = Nº1
Adodc1.Recordset.Fields("Col2") = Nº2
Adodc1.Recordset.Fields("Col3") = Nº3
Adodc1.Recordset.Fields("Col4") = Nº4
Adodc1.Recordset.Fields("Col5") = Nº5
Adodc1.Recordset.Update
Adodc1.Refresh
End If
End With

End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Oscar

Problema en For Next

Publicado por Oscar (63 intervenciones) el 14/09/2014 13:46:05
Cuando salta el error se te queda resaltada alguna linea en concreto, o la primera de todas.

Si es la primera puede ser que te falte alguna referencia, en caso de ser otra linea vendría bien saber cuál para detectar el error.

Así a ojo has creado :

Dim Recordset As Adodc (Supongo que querias poner Dim Adodc As RecordSet)

Pero luego usas Adodc1

Ademas usas RecodSet como tipo de variable tienes creada la referencia a Micrososft ActiveX Data Object



Por otro lado y sin ninguna acritud, decirte que me parece monstruoso el uso que haces del bucle for-next anidado, absolutamente desaconsejado pero ademas generas mas de 200 millones de ejecuciones para conseguir las 2 millones de combinaciones que necesitas

Ya que anidas bucles por lo menos hazlo algo asi

For Nº1 = 1 to 46
For Nº2 = Nº1 +1 to 47
For Nº3 = Nº2 +1 to 48
For Nº4 = Nº3 +1 to 49
For Nº5 = Nº4 +1 to 50

Next Nº5
Next Nº4
Next Nº3
Next Nº2
Next Nº1

Y realizas las 2 millones de ejecuciones que sí usas y te ahorras unas 203 millones de ejecuciones de código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar