Private Const CB_FINDSTRING As Long = &H14C
Private Const CB_FINDSTRINGEXACT As Long = &H158
Private Const LB_FINDSTRING As Long = &H18F
Private Const LB_FINDSTRINGEXACT As Long = &H1A2
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Public Function SelectItem(ByRef voControl As Object, ByRef vsItem As String, Optional ByVal vbExact As Boolean = True) As Long
Dim eMsg As Long
If TypeOf voControl Is VB.ComboBox Then
eMsg = IIf(vbExact, CB_FINDSTRINGEXACT, CB_FINDSTRING)
ElseIf TypeOf voControl Is VB.ListBox Then
eMsg = IIf(vbExact, LB_FINDSTRINGEXACT, LB_FINDSTRING)
Else
SelectItem = -1
Err.Raise 5
Exit Function
End If
If LenB(vsItem) Then
SelectItem = SendMessage(voControl.hWnd, eMsg, -1, ByVal vsItem)
If SelectItem > -1 Then
voControl.ListIndex = SelectItem
End If
Else
SelectItem = voControl.ListIndex
End If
End Function