Возникла следующая проблема. Есть форма "Объекты", на которой расположен список и поле. В списке выводится перечень адресов объектов, а поле необходимо для того, чтобы при наборе в нем адреса этот самый список фильтровался с вводом каждого символа.
Примерно, что у меня получилось - во вложении
Начал с того, что для поля "Фильтр" использовал событие KeyPress, а строку для фильтра брал из свойства поля .Text
- Код: Выделить всё
Private Sub Form_Load()
Фильтр.SetFocus
Фильтр.Text = ""
Список.RowSource = "SELECT [Адреса].[Адрес] FROM Адреса;"
End Sub
Private Sub Фильтр_KeyPress(KeyAscii As Integer)
Dim str As String, src As String
src = "SELECT [Адреса].[Адрес] FROM Адреса"
'Строка до нажатия клавиши:
str = Фильтр.Text
If str <> "" Then src = src & " WHERE ((Адреса.Адрес) Like (" & Chr(34) & "*" & str & "*" & Chr(34) & "));"
End If
Список.RowSource = src
DoCmd.Requery "Список"
End Sub
Вскоре выяснил, что при наборе в "Фильтр" очередного символа, в .Text передаются все набранные символы кроме последнего. В итоге пришлось к Фильтр.Text добавлять и ChrW(KeyAscii), что не очень удобно, так как пишется лишний код, как мне кажется, и возникает необходимость обработки клавиши Backspace.
То, как реализована эта обработка в коде ниже - просто для отвода глаз, лишь бы хоть как-то работала.
- Код: Выделить всё
Private Sub Фильтр_KeyPress(KeyAscii As Integer)
Dim str As String, src As String
src = "SELECT [Адреса].[Адрес] FROM Адреса"
'Строка до нажатия клавиши:
str = Фильтр.Text
'Доступные символы ввода:
If KeyAscii > 31 Then
'если да - добавляем к str символ только что нажатой клавиши:
str = str & ChrW(KeyAscii)
'Обработка Backspace
ElseIf KeyAscii = 8 Then
str = ""
Фильтр.Text = ""
End If
If str <> "" Then
src = src & " WHERE ((Адреса.Адрес) Like (" & Chr(34) & "*" & str & "*" & Chr(34) & "));"
End If
Список.RowSource = src
DoCmd.Requery "Список"
End Sub
Вероятно есть способ заставить последний символ передать вместе с набранным текстом в .Text, но я все никак не соображу, так как в VBA начал разбираться пару дней назад.
Если кто сможет мне помочь - буду очень благодарен.