Problema de selección en ListBox

Tengo un list box en el cual traigo datos desde una hoja de excel. Para ello hay un TxtBox que me permite ingresar el dato de búsqueda y luego en el ListBox muestra todas las filas que tienen este campo. ¿Ocurre qué al seleccionar el dato y luego presionar un command button para editar o borrar siempre me lleva al dato que está en "A5." Estará el problema en el código del TxtBox?

El listBox tiene el siguiente código:

Private Sub CommandButton1_Click()
On Error GoTo Errores
If Me.TxtFiltro1.Value = "" Then Exit Sub
Me.ListBox1.Clear j = 1
For i = 1 To 500
If Cells(i, j).Offset(0, 0).Value = CDbl(Me.TxtFiltro1.Value) Then
Me.ListBox1.AddItem Cells(i, j)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, j).Offset(0, 6)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = Cells(i, j).Offset(0, 7)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = Cells(i, j).Offset(0, 8)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = Cells(i, j).Offset(0, 9)
Else
End If
Next i
Exit Sub
Errores: MsgBox "No se encuentra.", vbExclamation, "RAN 3"
End Sub

1 respuesta

Respuesta
1

Esta rutina solo llena el listbox con los datos de la hoja que coincidan con el valor ingresado en el Textbox y se lo vé correcto.

¿Ahora qué necesitas? ¿Editar algún registro del Listbox? Y ya tenés pensado dónde vas a escribir los nuevos valores, ¿es decir tenés otros controles?

Espero tus aclaraciones para continuar...

Gracias, por la respuesta.!!

Ocurre que en ese listbox selecciono un valor y puedo editarlo o borrarlo y ocurre que cuando selecciono siempre me selecciona el registro que está en "A5".

La selección la hago con:

-----------------------

Private Sub ListBox1_Click()
valor = ListBox1.Value
Set busca = Sheets("Vtas_Dat").Range("a4:a504").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ubica = busca.address
msgbox "El dato está en la celda: " & ubica
range(ubica).select
End If
End Sub

------------------

Nuevamente GRACIAS.!!

No olvides que estás filtrando por un criterio, seguramente tendrás más de un registro =

¿Habrá alguna otra columna que tenga valores únicos como para hacer la búsqueda?

mmm no exactamente....lo que podría hacer es agregar otro filtro más, pero no me parecía complicarlo así. Antes buscaba seleccionar el registro con el siguiente código:

Private Sub ListBox1_Click()
'Activar la celda del registro elegido '
Range("a4").Activate
Cuenta = Me.ListBox1.ListCount
For i = 0 To Cuenta - 1
If Me.ListBox1.Selected(i) Then
Valor = Me.ListBox1.List(i)
On Error Resume Next
Sheets("Vtas_Dat").Range("A4:A504").Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate End If Next i
End Sub

Con este cuando seleccionaba un registro en el listbox siempre me llevaba a "A2" (trabajo con excel 2003).

Ninguna de las 2 sirve. Considerá que el listbox tiene datos x ej de la fila 2, la 5, la 10 ... y donde todas tienen un dato repetido .

Qué pena que ya tengas ocupadas las 10 col que permite el ListBox porque necesitamos llevar en una col el nro de fila ...

Tendrás que concatenar 2 col para liberar 1 y así llevar también la fila.

Entonces, en esta parte: '...ese listbox selecciono un valor y puedo editarlo o borrarlo...' para modificar el registro en la hoja, la fila será:

filx = ListBox1. List(ListBox1. ListIndex, 9) 'considerando que en la últ col le coloques la fila con esta línea:

ListBox1. List(ListBox1.ListCount - 1, 9) = Cells(i, j). Row

PD) Si estás trabajando sobre el formulario activo, no hace falta decirle Me. Excel ya sabe que estás ahí

Otra opción: es el uso de una búsqueda continua... buscando más de un campo, pero esto solo es posible para eliminarlo, no para guardar cambios ya que lo + probable es que hayas cambiado un campo y ya no encuentre coincidencias.

Resumiendo, tendrás que concatenar col o no cargar alguna que repite datos. Por ej si filtras por mes 'enero' no hace falta que incluyas esa col en el listbox, ya sabemos que es enero, ¿se comprendió?

Sdos, comentame qué resolviste

Gracias.

Eliminé 2 columnas y agregue una en la que pongo el N° de fila (es columna 8).

Entonces el código que se ejecuta cuando selecciono una fila queda así:

Private Sub ListBox1_Click()
'Activar la celda del registro elegido
filx = ListBox1.List(ListBox1.ListIndex, 8) 'considerando que en la últ col le coloques la fila con esta línea:
ListBox1.List(ListBox1.ListCount - 1, 8) = Cells(i, j).Row
End Sub

ocurre que cuando lo corro me da un error 1004 y solicita depurar la 2° Fila.

No, la fila de cada registro la agregás al ListBox al momento que lo llenás, en tu rutina inicial:

For i = 1 To 500
If Cells(i, j).Offset(0, 0).Value = CDbl(Me.TxtFiltro1.Value) Then
Me.ListBox1.AddItem Cells(i, j)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)

'... las que falten

ListBox1. List(ListBox1.ListCount - 1, 8) = Cells(i, j). Row

'sigue el resto de líneas

PD) No uso Me. Xq es redundante.

Ahora al momento de pasar los datos modificados a la hoja Excel, para saber a qué fila consultás ese valor en el registro del ListBox:

filx = ListBox1.List(ListBox1.ListIndex,8)


Y la celda destino se menciona como Cells(filx, 1) para col A, Cells(filx, 2) para la B y así con el resto.

¿Necesitas alguna otra aclaración con este código?. Si el tema está resuelto no olvides finalizar la consulta.

Sdos

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas