Problema con FOR

Iniciado por HJ ~, 2 Julio 2010, 15:51 PM

0 Miembros y 1 Visitante están viendo este tema.

HJ ~

Hola, veréis, tengo una función que se repite en VB y me obtiene una serie de variables de una cadena definida, el caso es que, por ejemplo, me obtiene las 5 primeras cadenas, pero las siguientes no me las puede obtener, me tira un error, ya que han sido alteradas, lo que quiero es que omita ese error y siga repitiendo la función FOR.

Hasta ahora me tiraba un error, pero lo evado haciendo esto:

Código (vb) [Seleccionar]
errorsub:
If Err Then
Exit For
End If


Pero eso no me sirve, ya que, para la función y, como es lógico, me para la función FOR pero no sigue adelante, mi pregunta es, como puedo hacer que se omita el error, y siga adelante?

No me digais con "on error resume next" porque no se repite, me tira la ultima cadena de antes.

Gracias

Novlucker

Sin ver la función estamos adivinando, debe de haber una razón para ese error verdad?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

HJ ~

Cita de: Novlucker en  2 Julio 2010, 15:53 PM
Sin ver la función estamos adivinando, debe de haber una razón para ese error verdad?

Saludos


Sin problema.

Código (vb) [Seleccionar]


For i = 0 To 788


    Nombre = Split(Split(Text1.Text, "mi nombre es")(i - 1), ".")(0)

 
    List2.AddItem Nombre

errorsub:
If Err Then
Exit For
End If
Next


La funcion funciona perfecto, pero si encuentr aun bache, es decir, una cadena que no contiene "Nombre" me peta.

Gracias

Novlucker

Notas, no uses etiquetas :-( (errorsub:)

El código tiene varios problemas:

  • Te supones que el array va hasta 788, pero eso no lo sabes con certeza (o si?)
  • No es eficiente, ya que con cada "vuelta" del for vuelves a hacer un split del text1.txt
  • En ambos split haces referencia al primer elemento del array, pero el array puede tener o no elementos, así que se parte cuando no los tiene.
  • Para i = 0 , (i - 1) = -1 = array(-1) ?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

HJ ~

Cita de: Novlucker en  2 Julio 2010, 16:18 PM
Notas, no uses etiquetas :-( (errorsub:)

El código tiene varios problemas:

  • Te supones que el array va hasta 788, pero eso no lo sabes con certeza (o si?)
  • No es eficiente, ya que con cada "vuelta" del for vuelves a hacer un split del text1.txt
  • En ambos split haces referencia al primer elemento del array, pero el array puede tener o no elementos, así que se parte cuando no los tiene.
  • Para i = 0 , (i - 1) = -1 = array(-1) ?

Saludos


1- No, tienes razón, no lo se con certeza.
2- En este caso debería separar el split entonces, no es así?
3- Exacto, el objetivo es que continúe cuando encuentre algo incorrecto
4- Eso no le des importancia lo hice porque no me cogía el primer elemento y lo debía hacer así.

Espero que me puedas ayudar.

Gracias

BlackZeroX

#5
Aprende a no hacer en un bucle sea del tipo qué sea un proceso tras otro repetitivo si es un split o X función qué sabes te va a dar lo mismo, es mejor almacenarlo en una variable para trabajar con esta y no con la función en este caso se resume a:

Código (vb) [Seleccionar]


On Error Resume Next  ' // para que ignore los errores y siga en la sucesion deseada!¡.

Dim TmpArray$()
Dim TmpArray2$()
Dim indexOfArray&

    TmpArray$ = Split("mi nombre es Miguel Angel O. A.", "mi nombre es")
   
    For indexOfArray = LBound(TmpArray$) To UBound(TmpArray$)
        TmpArray2$ = Split(TmpArray$(indexOfArray), ".")
        List2.AddItem TmpArray2$(0)
        If Err.Number > 0 Then Err.Clear: Exit For ' // Verifica si hay error si hay sale del for next pero antes limpia el error.
    Next

The Dark Shadow is my passion.