Автозаполнение для textbox
Модератор: Naeel Maqsudov
Добрый день!
Следующая задача:
Как в текстбоксе формы выполнять автозаполнение (или подстановку вариантов, не знаю как понятней объяснить), в общем, по мере ввода начала слова чтобы предлагались варианты его продолжения, как в ячейках эксель. Нужно заполнять три текстбокса с ФИО, ну фамилия понятно, вряд-ли совпадет, а вот имена и отчества явно не уникальны. А брать их желательно из столбца на листе, если набранного имени еще нет- добавить в этот "справочник"
Следующая задача:
Как в текстбоксе формы выполнять автозаполнение (или подстановку вариантов, не знаю как понятней объяснить), в общем, по мере ввода начала слова чтобы предлагались варианты его продолжения, как в ячейках эксель. Нужно заполнять три текстбокса с ФИО, ну фамилия понятно, вряд-ли совпадет, а вот имена и отчества явно не уникальны. А брать их желательно из столбца на листе, если набранного имени еще нет- добавить в этот "справочник"
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
В аттаче пример решения с использованием функций листа MS Excel.
На основании этого кода легко построить класс.
Как показала практика - автоматическое расширение текста в поле ввода
(без специальной клавиши, в данном примере - F2) неудобно оператору.
На основании этого кода легко построить класс.
Как показала практика - автоматическое расширение текста в поле ввода
(без специальной клавиши, в данном примере - F2) неудобно оператору.
- Вложения
-
- SubstTxt.zip
- (16.15 КБ) 48 скачиваний
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
Большое спасибо! Сейчас буду пробовать, может что и получится 

- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Кроме непосредственно текстового поля мне кажется очень удобно и просто использовать ComboBox, который имеет встроенную возможность автоподстановки текста, подобную той, что есть в ячейках Excel под списком. Достаточно добавить сортировку входных данных и раскрытие списка при начале ввода текста. Смотрите мой пример (вложение).
- Вложения
-
- autocomplete.zip
- (10.36 КБ) 59 скачиваний
На заказ: VBA, Excel mc-black@yandex.ru
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Mc-black, вариант, разумеется, возможный, но моих операторов (да и меня) раздражает подсказка непосредственно в поле ввода.
Кроме того, практика показала, что когда autocomplete промахивается, большинство обученных! (
) операторов вместо того что бы сразу нажать DEL и продолжить ввод, нажимают стрелку вправо или влево и затем стирают по одному символу
и только потом вводят новый текст.
Опять же предложенная схема хороша когда идёт сопоставление слева для тех же
фамилий (о чём собственно и писал топикстартер), а предложенный мной вариант
легко модифицируется в схему сопоставления "*Text*", удобную при вводе артикулов или номенклатуры названий, c выводом результатов сопоставления в
ComboBox.
Кроме того, практика показала, что когда autocomplete промахивается, большинство обученных! (


Опять же предложенная схема хороша когда идёт сопоставление слева для тех же
фамилий (о чём собственно и писал топикстартер), а предложенный мной вариант
легко модифицируется в схему сопоставления "*Text*", удобную при вводе артикулов или номенклатуры названий, c выводом результатов сопоставления в
ComboBox.
Андрей Энтелис,
aentelis.livejournal.com
aentelis.livejournal.com
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Делайте как вам удобно, я на практике автокомплит еще не применял.
На заказ: VBA, Excel mc-black@yandex.ru
Mc-black, да, такой вариант тоже неплох. убрал стрелку, уменьшил отображение строк до трех... На первый взгляд достаточно удобно
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Для второго варианта (с комбобокс) добавил сохранение нового значения:
Сойдет? Или можно как-нибудь получше?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Для второго варианта (с комбобокс) добавил сохранение нового значения:
Код: Выделить всё
Private Sub ComboBox1_AfterUpdate()
Dim i As Long
i = 1
Do While Not ThisWorkbook.Worksheets(1).Cells(i, 1).Value = Empty
If ThisWorkbook.Worksheets(1).Cells(i, 1).Value <> UserForm1.ComboBox1.Value Then
i = i + 1
Else
Exit Sub
End If
Loop
If MsgBox("Добавить запись """ & UserForm1.ComboBox1.Value & """ ?", vbYesNo + vbQuestion) = vbYes Then
ThisWorkbook.Worksheets(1).Cells(i, 1).Value = _
StrConv(Trim(UserForm1.ComboBox1.Value), vbProperCase)
End If
End Sub
Сойдет? Или можно как-нибудь получше?
