A melhor maneira é usando API, sem usar outros controles...
olha só:
Declare num módulo:
#If Win32 Then
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
#Else
Declare Function SendMessage Lib "User" _
(ByVal hwnd As Integer, ByVal wMsg As Integer, _
ByVal wParam As Integer, lParam As Any) As Long
#End If
Public Sub CboAutoComplete(CboBox As ComboBox, Key As Integer)
Dim CB As Long
Dim FindString As String
Const CB_ERR = (-1)
Const CB_FINDSTRING = &H14C
If Key < 32 Or Key > 127 Then Exit Sub
If CboBox.SelLength = 0 Then
FindString = CboBox.Text & Chr$(Key)
Else
FindString = Left$(CboBox.Text, CboBox.SelStart) & Chr$(Key)
End If
CB = SendMessage(CboBox.hwnd, CB_FINDSTRING, -1, ByVal FindString)
If CB <> CB_ERR Then
With CboBox
.ListIndex = CB
.SelStart = Len(FindString)
.SelLength = Len(.Text) - .SelStart
End With
End If
Key = 0
End Sub
dae no Keypress do Combo:
Private Sub Cidade_KeyPress(KeyAscii As Integer)
CboAutoComplete Cidade, KeyAscii
End Sub
E pronto !!
mas cuidado, pq essa função bloqueia qualquer tecla q não possua caractere no combo.