VBA, MS Access MS Access в примерах

Поле со Списком (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$
'Заглушка: Если навигация по списку iKeyCode = 40(Вверх) или  iKeyCode = 38(Вниз):
    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 'Если текст задан:
        'Строим фильтр: WHERE ...
        sFilter = "WHERE Фамилия Like '*" & sFilter & "*' ORDER BY"
        'Вставляем строку WHERE ... в исходный источник строк поля со списком
        sFilter = Replace(cbxRowSource, "ORDER BY", sFilter)
        'Debug.Print 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



Picture




Скачать

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


Назад ToTop
L.E. 24.03.2022
Рейтинг@Mail.ru