VB Code:
Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Const CB_FINDSTRING = &H14C Const CB_ERR = (-1) '******************************************************************************* ' AUTOFIND (FUNCTION) ' ' DESCRIPTION: ' AUTOCOMPLETE A COMBOBOX (WORKS !!!) '******************************************************************************* Public Function AUTOFIND(ByRef cboCurrent As ComboBox, _ ByVal KeyAscii As Integer, Optional ByVal LimitToList As Boolean = False) Dim lCB As Long Dim sFindString As String If KeyAscii = 8 Then If cboCurrent.SelStart <= 1 Then cboCurrent = "" AUTOFIND = 0 Exit Function End If If cboCurrent.SelLength = 0 Then sFindString = UCase(Left(cboCurrent, Len(cboCurrent) - 1)) Else sFindString = Left$(cboCurrent.Text, cboCurrent.SelStart - 1) End If ElseIf KeyAscii < 32 Or KeyAscii > 127 Then Exit Function Else If cboCurrent.SelLength = 0 Then sFindString = UCase(cboCurrent.Text & Chr$(KeyAscii)) Else sFindString = Left$(cboCurrent.Text, cboCurrent.SelStart) & Chr$(KeyAscii) End If End If lCB = SendMessage(cboCurrent.hwnd, CB_FINDSTRING, -1, ByVal sFindString) If lCB <> CB_ERR Then cboCurrent.ListIndex = lCB cboCurrent.SelStart = Len(sFindString) cboCurrent.SelLength = Len(cboCurrent.Text) - cboCurrent.SelStart AUTOFIND = 0 Else If LimitToList = True Then AUTOFIND = 0 Else AUTOFIND = KeyAscii End If End If End Function




Reply With Quote