Búsqueda en un ListBox a partir de la ultima fila

El listBox de VBA Excel, donde estoy trabajando tiene muchas Filas (17000), en la búsqueda para modificar un dato, recurro a una búsqueda del tipo:

For y = 1 To 17
Controls("TextBox" & y) = ListBox1.Column(y - 1)
Next

Esta búsqueda comienza por la primera fila y hasta que llega a la 17000 se hace muy lento, la cuestión es que habitualmente, las modificaciones a realizar son sobre las ultimas, por lo que me convendría iniciar la búsqueda desde el final.

Se puede realizar esto, ¿o optimizar el tiempo de búsqueda de alguna manera?

1 respuesta

Respuesta
1

Los bucles pueden ir hacia abajo (tal como lo tenés ahora) o hacia arriba del siguiente modo:

For i = 17 to 1 Step -1

Hola Elsa, gracias por ocuparte, pero no me da resultado, copie tal cual lo que me pasaste pero nada, sigue asiendo lo mismo de arriba hacia abajo.

Previo al bucle realizo una comprobación del tipo:

Function CuentaOk() As Boolean
ListBox1.ListIndex = 0
Do
If ListBox1.Column(0) = CStr(TextBox18.Text) Then
CuentaOk = True
Exit Do
End If
ListBox1.ListIndex = ListBox1.ListIndex + 1
Loop Until ListBox1.ListIndex = ListBox1.ListCount
End Function

Pero creo que esto no influye en lo que me pasaste?

Gustavo

Desconozco el uso de tu función obviamente.

Pero si me dejas un bucle y solicitas que se pueda recorrer desde el final hacia arriba, es tal como te lo indiqué: con Step - ... en este caso -1

PD) Si con tu función estás recorriendo el listbox hasta el final... ¿para luego empezar a subir con el otro bucle? No se comprende tu aclaración.

Sdos!

Está un poco difícil el foro, no veo la respuesta que acabo de enviarte... si te parece mejor aclarar este tema enviándome la parte de tu libro que tenga que ver con el formulario, podes utilizar alguno de los correos que aparecen en el sitio que dejo al pie:

Tal lo comentado por mail, dejá el bucle como está y ajustá la función de este modo:

Function CuentaOk() As Boolean
'EM: posicionarse en el último elemento del listbox
ListBox1.ListIndex = ListBox1.ListCount - 1
Do
   If ListBox1.Column(0) = CStr(TextBox18.Text) Then
      CuentaOk = True
    Exit Do
   End If
   ListBox1.ListIndex = ListBox1.ListIndex - 1   'retroceder 
Loop Until ListBox1.ListIndex = 0                     '*
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas