La Web del Programador: Comunidad de Programadores
 
    Pregunta:  4866 - ¿ COMO HACER BUSQUEDAS EXACTAS EN CONTROL LIST ?
Autor:  Patricio Hernandez
Necesito sabes como poder realizar busquedas de cadenas de texto en un list con un determinado numero de item´s ????

  Respuesta:  Gabriel Memmel
Abajo te escribo un código muy simple que utiliza la funcion 'StrComp', Espero que te sirva, en caso de alguna duda solo comunicate conmigo

'-------------------------------------------------
'Esta es una forma muy simple de realizar busquedas muy precisas en un ListBox
'a traves de la funcion 'StrComp'
'Para este proyecto se necesita un ListBox, un TextBox, dos CommandButtons
'y dos CheckBoxes

Dim Ult_Linea, Ult_Caracter, Encontrado

'Busca una palabra en un ListBox
Private Function Busqueda(Texto, Ult_Lin, Ult_Car)
'Prepara el texto para buscar la cadena completa una sub cadena, segun lo seleccionado
If Check2.Value = 0 Then Texto1 = Texto
If Check2.Value = 1 Then Texto1 = " " + Trim$(Texto) + " "
'Inicia el ciclo de linea por linea
For i1 = 0 To List1.ListCount - 1
'Verifica si ya se encontro para buscar el la ultima linea revisada
If i1 < Ult_Lin Then i1 = Ult_Lin
Texto2 = " " + List1.List(i1) + " "
'Inicia el ciclo de caracter por caracter
For i2 = 1 To Len(Texto2) - Len(Texto1)
'Verifica si ya se encontro para buscar en el siguiente caracter
If i2 < Ult_Car Then i2 = Ult_Car
'Verifica si el texto a buscar puede o no estar en esa línea
If Texto2 <> "" And Len(Texto1) > 0 And Len(Texto1) <= Len(Texto2) _
Then texto3 = Mid$(Texto2, i2, Len(Texto1))
If Check1.Value = 1 Then
'Realiza la comparacion diferenciando mayusculas de minusculas
If StrComp(Texto1, texto3, vbBinaryCompare) = 0 Then
List1.Selected(i1) = True
Ult_Linea = i1: Ult_Caracter = i2 + 1
Busqueda = True
Exit Function
End If
End If
If Check1.Value = 0 Then
'Realiza la comparacion sin diferenciar mayusculas de minusculas
If StrComp(UCase$(Texto1), UCase$(texto3), vbBinaryCompare) = 0 Then
List1.Selected(i1) = True
Ult_Linea = i1: Ult_Caracter = i2 + 1
Busqueda = True
Exit Function
End If
End If
Next i2
'Mantiene los valores como si no se encontrase nada por si no se encuentra
List1.Selected(i1) = False
Ult_Linea = 0
Ult_Caracter = 0
Next i1
Busqueda = False
End Function

Private Sub Command1_Click()
'Realiza una busqueda desde el inicio dando los datos como 0 en el comienzo de
'linea y caracter y devuelve un valor booleano a la variable 'Encontrado'
Encontrado = Busqueda(Text1, 0, 0)
End Sub

Private Sub Command2_Click()
'Realiza una busqueda desde la ultima palabra encontrada para ver si existen
'otras iguales y devuelve un valor booleano a la variable 'Encontrado'
Encontrado = Busqueda(Text1, Ult_Linea, Ult_Caracter)
End Sub