Te dejo este codigo aver si te sirve de ayuda, es para filtrar con combobox.
Option Explicit
'Función Api SendMessageLong
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Backspaced As Boolean 'Flag
Private Sub Combo1_Change()
'Le pasamos el combo como parámetro
AutoComplete Combo1
End Sub
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyBack, vbKeyDelete
Select Case Len(Combo1.Text)
Case Is <> 0
Backspaced = True
End Select
End Select
End Sub
'Función para autocompletar el combo.
Public Function AutoComplete(ctlComboBox As Control)
Dim i%, intSel% '
Select Case (Backspaced Or Len(ctlComboBox.Text) = 0)
Case True: Backspaced = False: Exit Function
End Select
With ctlComboBox
'RECORREMOS LOS ITEMS DEL COMBO BUSCANDO LA COINCIDENCIA
'DE LO QUE HAYA ESCRITO
For i = 0 To .ListCount - 1
If InStr(1, .List(i), .Text, vbTextCompare) = 1 Then
intSel = .SelStart
.Text = .List(i)
.SelStart = intSel
.SelLength = Len(.Text) - intSel
Exit For
End If
Next i
End With
End Function
Private Sub Combo1_KeyPress(KeyAscii As Integer)
'Esta linea es para que se despliegue la lista mientras escribimos _
pero si presionas la teclaEnter hacemos lo contrario, la cerramos _
fijate que esto lo determina la variable booleana TRue y False _
en el 3º parametro de la funcion APi
Dim resp As Integer
'Si se presionó enter
If KeyAscii = 13 Then
SendMessageLong Combo1.hwnd, &H14F, False, 0
Else
'Si no siempre la lista desplegada
SendMessageLong Combo1.hwnd, &H14F, True, 0
End If
End Sub
Private Sub Form_Load()
'Llenamos el combo con algunos elementos
With Combo1
.AddItem "Pedro"
.AddItem "Marcelo"
.AddItem "Mariano"
.AddItem "Carolina"
.AddItem "Jose"
.AddItem "Maria"
.AddItem "Estela"
.AddItem "Fernando"
.AddItem "Rodrigo"
End With
End Sub
__________________
**El destino no esta escrito, cada uno marca el suyo
|