Полагаю той вопрос возникал не раз, но не нашел простого решения поиском.. Выпадающий список с поиском делает то, что нужно, но возможно есть вариант без комбобоксов.
Задача: сделать выпадающий список с автоподстановкой значений при вводе первых символов вручную. На скриншоте черным выделено "штатная автоподстановка для непрерывного списка", хотелось бы сделать такую же, только на основании своих значений (имеющую приоритет над штатной автоподстановкой).
Даны отсортированные, уникальные данные (data) ~500 строк, которые подставляются в пополняемый список (list) <2000строк.
Собственно зачем это необходимо:
Выпадающий список – чтобы исключить неправильное написание и была возможность выбрать значение (ФИО) не зная его изначально.
Возможность ввода по первым символам – для ускорения ввода, чтобы не листать выпадающий список каждый раз.
Доброго дня,
Полагаю той вопрос возникал не раз, но не нашел простого решения поиском.. Выпадающий список с поиском делает то, что нужно, но возможно есть вариант без комбобоксов.
Задача: сделать выпадающий список с автоподстановкой значений при вводе первых символов вручную. На скриншоте черным выделено "штатная автоподстановка для непрерывного списка", хотелось бы сделать такую же, только на основании своих значений (имеющую приоритет над штатной автоподстановкой).
Даны отсортированные, уникальные данные (data) ~500 строк, которые подставляются в пополняемый список (list) <2000строк.
Собственно зачем это необходимо:
Выпадающий список – чтобы исключить неправильное написание и была возможность выбрать значение (ФИО) не зная его изначально.
Возможность ввода по первым символам – для ускорения ввода, чтобы не листать выпадающий список каждый раз.
изучал примеры по ссылке, но к сожалению, не нашел похожего на мой случай.. меня интересует Возможность ввода с автоподстановкой по первым символам из моих данных в первую очередь.
изучал примеры по ссылке, но к сожалению, не нашел похожего на мой случай.. меня интересует Возможность ввода с автоподстановкой по первым символам из моих данных в первую очередь.user0
Сообщение отредактировал user0 - Понедельник, 14.01.2013, 10:42
Попробуйте эту "корявую реализацию" поиска в списке. Пользователю необходимо совершить 3 клика по выпадающему списку: - Вводим одну или несколько начальных букв в ячейку "D2"(регистр значения не имеет) - 1-й клик.Раскрывается список; - 2-й клик.Подставляется первое ,идущее по алфавиту слово; - 3-й клик.Раскрывается список на подставленном слове.Выбираем нужное. Это конечно совсем не то что хотелось ,но хоть что-то... Чтобы сделать "красиво" не хватает событий для Worksheet,срабатывающих при вводе значений в ячейку..
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lReply As Long, i As Integer Dim counter As Integer, MyName As String, NameRange As String
If Target.Cells.count > 1 Then Exit Sub If Target.Address = "$D$2" Then If IsEmpty(Target) Then Exit Sub counter = Len(Target) MyName = Left(Target, counter) For i = 1 To Range("People").count NameRange = Left(Range("People").Cells(i), counter) If LCase(NameRange) = LCase(MyName) Then Application.EnableEvents = False Range("D2") = Range("People").Cells(i) Application.EnableEvents = True Exit For End If Next If WorksheetFunction.CountIf(Range("People"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("People").Cells(Range("People").Rows.count + 1, 1) = Target Range("People").Sort Key1:=Range("A1"), _ Order1:=xlAscending, Header:=xlNo Else Target = "" End If End If End If End Sub
[/vba]
Спасибо, нашел комментарий. Попробую пока предложенный там вариант..
Попробуйте эту "корявую реализацию" поиска в списке. Пользователю необходимо совершить 3 клика по выпадающему списку: - Вводим одну или несколько начальных букв в ячейку "D2"(регистр значения не имеет) - 1-й клик.Раскрывается список; - 2-й клик.Подставляется первое ,идущее по алфавиту слово; - 3-й клик.Раскрывается список на подставленном слове.Выбираем нужное. Это конечно совсем не то что хотелось ,но хоть что-то... Чтобы сделать "красиво" не хватает событий для Worksheet,срабатывающих при вводе значений в ячейку..
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lReply As Long, i As Integer Dim counter As Integer, MyName As String, NameRange As String
If Target.Cells.count > 1 Then Exit Sub If Target.Address = "$D$2" Then If IsEmpty(Target) Then Exit Sub counter = Len(Target) MyName = Left(Target, counter) For i = 1 To Range("People").count NameRange = Left(Range("People").Cells(i), counter) If LCase(NameRange) = LCase(MyName) Then Application.EnableEvents = False Range("D2") = Range("People").Cells(i) Application.EnableEvents = True Exit For End If Next If WorksheetFunction.CountIf(Range("People"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("People").Cells(Range("People").Rows.count + 1, 1) = Target Range("People").Sort Key1:=Range("A1"), _ Order1:=xlAscending, Header:=xlNo Else Target = "" End If End If End If End Sub