Ya se que pensareis que es una pregunta muy documentada pero...
Tengo un montón de ejemplos de código para, en teoría, hacer esto, pero ninguno funciona.
Explico lo que se necesita.
Tengo por ejemplo, estos nombres de archivos en un ListBox:
Sonia
SoniA - Co(2)
sOnIa - copia
sonia
Dario_Sonia_1
PepeSoNia_2(a)
OscarMariSoniA
Imagen_1
JorjePepe_2
Y el nombre a buscar en el ListBox es "Sonia"
Y hay 3 posibilidades de coincidencias, dependiendo de el estado de 2 CheckBox
1 - nombre exacto en nº de caracteres y case sensitive en cada una de las letras
solo devolvería"Sonia"
2 - nombre que contiene mismo nº de caracteres y case sensitive en cada una de las letras
devolvería "Sonia"
devolvería "Dario_Sonia_1"
3 - nombre que contiene mismo nº de caracteres y No case sensitive en cada una de las letras
devolvería "Sonia"
devolvería "SoniA - Co(2)"
devolvería "sOnIa - copia"
devolvería "sonia"
devolvería "Dario_Sonia_1"
devolvería "PepeSoNia_2(a)"
devolvería "OscarMariSoniA"
Yo he escrito un código que funciona al 100%, pero lo publico aquí por si alguien me sugiere si hay una forma mas fácil, o más "profesional" de hacerlo.
Y no comprendo como no he sido capaz de encontrar un código que haga esto en ningún sitio, supongo que no seré el único que necesita este tipo de código.
Esto es lo que tengo:
Código
Private sub Buscar(s1 as string,busca as string) If Form1.CheckExacto.Value = 1 Then 'Exacto If s1 = busca Then 'lo ha conseguido Exit Sub Else Exit Sub End If End If If Form1.CheckCase.Value = 0 Then 'No Case sensitive Test = Igual(s1, busca, False) If Test Then 'lo ha conseguido Else: Exit Sub End If Exit Sub Else 'Case sensitive Test = Igual(s1, busca, True) If Test Then 'lo ha conseguido Else: Exit Sub End If Exit Sub End If Public Function Igual(st As String, buscar As String, Sen As Boolean) As Boolean Dim i As Integer, s As String, L As Integer, s1 As String, c As Byte, letra As Byte s = Trim(st) L = Len(buscar) letra = Asc(Left(buscar, 1)) Igual = False For i = 1 To Len(s) c = Asc(Mid(s, i, 1)) s1 = Mid(s, i, L) If Compara(s1, buscar, Sen) Then Igual = True Exit For End If Next End Function Public Function Compara(dato As String, Busca As String, Sen As Boolean) As Boolean Dim i As Integer, c As Byte, n As Integer, b As Byte n = 0 For i = 1 To Len(Busca) c = Asc(Mid(dato, i, 1)) b = Asc(Mid(Busca, i, 1)) If Sen Then If c = b Then n = n + 1 End If Else If (c Or &H20) = b Or c = b Or (c Xor &H20) = b Then n = n + 1 End If End If Next If n = Len(Busca) Then Compara = True End If End Function
Un saludo.