Поле со Списком (ComboBox) - Фильтрация списка по введённому значению
Лучше сразу установить Property: ComboBox.AutoExpand = False
В заголовке модуля формы пишем:
Option Explicit
Private iKeyCode%
Private Const cbxRowSource$ = "SELECT КодСотрудника, Фамилия FROM Сотрудники ORDER BY Фамилия;"
Дальше по событиям:
Private Sub cbxSName_AfterUpdate()
Dim vVal
vVal = Me!cbxSName
Me!cbxSName.RowSource = cbxRowSource
Me!cbxSName = vVal
End Sub
Private Sub cbxSName_Change()
Dim sFilter$
If iKeyCode = 40 Or iKeyCode = 38 Then Exit Sub
sFilter = Trim(cbxSName.Text)
If Me!cbxSName.ListIndex > -1 And sFilter = "" Then
cbxSName_AfterUpdate
Exit Sub
End If
sFilter = Trim(cbxSName.Text)
If Len(sFilter) > 0 Then
sFilter = "WHERE Фамилия Like '*" & sFilter & "*' ORDER BY"
sFilter = Replace(cbxRowSource, "ORDER BY", sFilter)
Me!cbxSName.RowSource = sFilter
Else
Me!cbxSName.RowSource = cbxRowSource
End If
If Me!cbxSName.ListIndex = -1 Then
Me!cbxSName.Dropdown
Else
Me!cbxSName.RowSource = cbxRowSource
End If
End Sub
Private Sub cbxSName_KeyDown(KeyCode As Integer, Shift As Integer)
iKeyCode = KeyCode
End Sub


MSA-2007 и выше ( 49 kB) Пример
|