Les comento, queria crear para una grilla, unos filtros por columna al estilo de Excel ( ahora tambien lo vi en el explorador de win, en las ultimas versiones), donde uno hace un click en el header de la columna y aparece un combo con todos los items contenidos en esa columna, pero obviamente sin repetir items del mismo valor.
Tal vez podia hacer una consulta a la base con un GROUP BY, pero lo queria hacer directamente con lo que ya tenia en la grilla, y bueno jugando un rato salio una clase asi:
cListaGroup.cls
Option Explicit
Private m_colItems As Collection
Public Sub AddItem(sItem As String)
'ver si ya existe el item en la coleccion
If ItemExist(sItem) Then
Exit Sub
Else
'No existe, agregar el item a la coleccion
m_colItems.Add sItem, sItem
End If
End Sub
Private Function ItemExist(sItem As String) As Boolean
On Error GoTo myErr
m_colItems.Item (sItem)
ItemExist = True
Exit Function
myErr:
ItemExist = False
Err.Clear
End Function
Public Function GetListArray() As String()
Dim arTmp() As String
ReDim arTmp(m_colItems.Count - 1)
Dim vItem As Variant
Dim iX As Integer
For Each vItem In m_colItems
arTmp(iX) = vItem
iX = iX + 1
Next
GetListArray = arTmp
End Function
Private Sub Class_Initialize()
Set m_colItems = New Collection
End Sub
Private Sub Class_Terminate()
Set m_colItems = Nothing
End Sub
El uso es muy basico,
AddItem : agrega un item a la lista, la clase se encarga de ver si lo agrega o ya lo tiene
GetListArray: devuelve un Array string de los valores
Ej:
Private Sub Command1_Click()
Dim oLista As New cListaGroup
Dim arList() As String
With oLista
.AddItem "pepe"
.AddItem "juan"
.AddItem "pedro"
.AddItem "luis"
.AddItem "juan"
.AddItem "pepe"
arList = .GetListArray()
End With
Set oLista = Nothing
CargarCombo arList
End Sub
devuelve:
pepe
juan
pedro
luis