Filtrar entradas en un listbox

Hola, Mi nombre es Nelson y tengo la siguiente. Duda:
Utilice un proced. Para que los datos que me entran en un listbox no se repitan, este es un extracto:
On Error Resume Next
For Each Cell In AllCells
NoDupes.Add Cell.Value, CStr(Cell.Value)
Next Cell
On Error GoTo 0
Me funciona sin problemas, pero le quiero agregar otra condición y es que evalúe otra columna y si esta cumple el criterio entonces que en el listbox entren solo los que cumplen con la condición y que no se repitan.
Ojala te haya quedado claro

1 respuesta

Respuesta
1
Asumiré que las entradas al listbox, corresponderán a aquellas celdas que tengan un 2 (dos) en la columna a la derecha de la que estoy evaluando. Si no tuviera ese valor no será incluida en al lista.
En este caso el código sería:
On Error Resume Next
For Each Cell In AllCells
If Cell.Offset(0,1).value =2 Then NoDupes.Add Cell.Value, CStr(Cell.Value)
Next Cell
On Error GoTo 0
Pruébalo y dime.
Esto debería resolver tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.
Un abrazo!
Fernando
*====================================*
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó.
A pesar de que al verificar visualmente se nota que ejecuta los pasos correctamente, no agrega ninguna dato al listbox, ¿se te ocurre porque?
Te adjunto el procedimiento completo:
Dim AllCells As Range, Cell As Range
Dim NoDupes As New Collection
Dim i As Integer, j As Integer
Dim Swap1, Swap2, Item
Worksheets("comprobantes").Select
Set AllCells = Range("c2:c2005")
On Error Resume Next
For Each Cell In AllCells
If Cell.Offset(0, -2).Text = cbx_companias.Text Then NoDupes.Add Cell.Value, CStr(Cell.Value)
Next Cell
On Error GoTo 0
For i = 1 To NoDupes.Count - 1
For j = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(j) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(j)
NoDupes.Add Swap1, before:=j
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove j + 1
End If
Next j
Next i
For Each Item In NoDupes
usf_search.cbx_fgfecha.AddItem Item
Next Item
Por lo que puedo ver, no estás evaluando otra columna como planteabas en tu primer pregunta. Por eso, obviamente "no resultó" como dices.
La verdad que me resulta difícil imaginar tu proyecto sólo con lo que pasaste, pero conceptualmente, deberías revisar el tramo:
NoDupes.Add Swap1, before:=j
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove j + 1
Puesto que esto altera sensiblemente la posición de los elementos i y j que usas dentro del bucle.
En una pequeña prueba de escritorio, noté que el loop tomaba números distintos a la serie original, por lo cual asumo que la posición de estos dos items está influenciada por lo que hace la macro. Prueba con un rango de cuatro o cinco celdas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas