Страницы: 1 2 3 4 След.
RSS
Выпадающий список с возможностью поиска внутри списка
 
Добрый день подскажите как можно реализовать поиск в выпадающем списке  по смыслу если ввести букву А  в  поле отображались все что есть на букву Аэпорт, Ателье и тд.

 
 
А что мешает предварительно выполнить сортировку данных в этом списке?
 
ничего не мешает это так к примеру у меня 10 слов на букву А, а есть очень большие справочники листать их не всегда удобно и не быстро
 
вопрос снят нашел тут способ №4 http://www.planetaexcel.ru/techniques/1/40/
 
Здравствуйте. А комбобокс не устраивает? Или выпадающих списков много? Если списков много то можно тот же комбобокс, но с макросом по событию активации ячейки. А уж коли использовать макрос то и формирование списка можно ему доверить, пусть сортирует только соответствующие первым буквам. Подобные темы уже были на форуме.
 
gling,не силен в макросах((  я головой понимаю что формулами не все и не всегда сделать. Сейчас делаю автоматизацию производственных процессов на ходу. Обучаться макросам  в данный период времени не имею свободного времени  
 
Вот вариант того о чем писал. При вводе первых букв предлагается вариант. Но лучше когда список отсортирован,близкие по значениям будут рядом в раскрывающемся списке.
 
gling, я типа того уже сделал с помощью элемента ActiveX
 
Посмотрите еще вариант. Для работы нужно активировать ячейку в столбце А. Писал не я, где то слямзил, сейчас уже не вспомню. Спасибо автору, мне очень понравилось по этому и сохранил. Можно настроить сочетание только с начала текста ищет и формирует список, а можно по сочетанию внутри текста. При активации заполненной ячейки ЛистБокс и ТекстБокс не появятся, ну это можете настроить под свои нужды, например на двойной клик очищать ячейку и отображать Боксы. Экспериментируйте.
 
gling, круто вообще!!! буду побывать адаптировать,  сразу вопрос а если  одном листе много таких  выпадающих списков нужно вставить в мою таблицу с переменными как указать источники в прилагаемом файле  это я как понял UCase(Лист1.Cells(i, 12))
Изменено: Виктор C - 08.10.2017 18:41:23
 
Да это ссылка на столбец где находятся данные для списка.
 
хочется сделать красиво а VBA  я не знаю  думал исправлю
ComboBox1 на ComboBox2;
TextBox1 на  TextBox2;
Range("A2:A3000")) на Range("B2:B3000"));
поменял столбец 12 на 13
и получиться второй список, а нифига (((

Код
Dim bu As Boolean

Private Sub ComboBox1_Change()

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A2:A3000")) Is Nothing Then
        If Target.Value <> "" Then: Me.TextBox1.Visible = False: Me.ListBox1.Visible = False: Exit Sub
        bu = True
        With Me.TextBox1
            .Top = Target.Top
            .Left = Target.Left
            .Height = Target.Height
            .Width = Target.Width
            .Text = Target.Value
            .Activate
        End With
        With Me.ListBox1
            .Top = Target.Top
            .Left = Target.Left + Target.Width
            .Clear
        End With
        bu = False
        Me.TextBox1.Visible = True
        Me.ListBox1.Visible = True
    Else
        Me.TextBox1.Visible = False
        Me.ListBox1.Visible = False
    End If
End Sub
Private Sub TextBox1_Change()
    Dim X, i, txt As String, lt, s As String
    If Len(TextBox1.Text) = 0 Or bu Then Exit Sub
    txt = TextBox1.Text
    lt = Len(TextBox1.Text)
    X = Лист1.Columns(12).SpecialCells(2).Value
    For i = 1 To Лист1.Cells(Rows.Count, 12).End(xlUp).Row
        'If InStr(1, UCase(Лист1.Cells(i, 12)), UCase(TextBox1.Value)) > 0 Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в любом месте текста
        If UCase(txt) = UCase(Mid(Лист1.Cells(i, 12), 1, lt)) Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в начале текста
    Next i
    ListBox1.List = Split(s, "~")
End Sub

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = -1 Then Exit Sub
    bu = True
    ActiveCell.Value = ListBox1.Value
    Me.TextBox1.Visible = False
    Me.ListBox1.Visible = False
    bu = False
End Sub

Dim bu As Boolean

Private Sub ComboBox2_Change()

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B2:B3000")) Is Nothing Then
        If Target.Value <> "" Then: Me.TextBox2.Visible = False: Me.ListBox2.Visible = False: Exit Sub
        bu = True
        With Me.TextBox2
            .Top = Target.Top
            .Left = Target.Left
            .Height = Target.Height
            .Width = Target.Width
            .Text = Target.Value
            .Activate
        End With
        With Me.ListBox2
            .Top = Target.Top
            .Left = Target.Left + Target.Width
            .Clear
        End With
        bu = False
        Me.TextBox2.Visible = True
        Me.ListBox2.Visible = True
    Else
        Me.TextBox2.Visible = False
        Me.ListBox2.Visible = False
    End If
End Sub
Private Sub TextBox2_Change()
    Dim X, i, txt As String, lt, s As String
    If Len(TextBox2.Text) = 0 Or bu Then Exit Sub
    txt = TextBox2.Text
    lt = Len(TextBox2.Text)
    X = Лист1.Columns(13).SpecialCells(2).Value
    For i = 1 To Лист1.Cells(Rows.Count, 13).End(xlUp).Row
        'If InStr(1, UCase(Лист1.Cells(i, 13)), UCase(TextBox2.Value)) > 0 Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в любом месте текста
        If UCase(txt) = UCase(Mid(Лист1.Cells(i, 13), 1, lt)) Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в начале текста
    Next i
    ListBox2.List = Split(s, "~")
End Sub

Private Sub ListBox2_Click()
    If ListBox2.ListIndex = -1 Then Exit Sub
    bu = True
    ActiveCell.Value = ListBox2.Value
    Me.TextBox2.Visible = False
    Me.ListBox2.Visible = False
    bu = False
End Sub
Изменено: Виктор C - 08.10.2017 21:21:45
 
Для столбца А и В разные списки, Box используются те же.
Код
Private Sub TextBox1_Change()    Dim X, i, txt As String, lt, s As String
    If Len(TextBox1.Text) = 0 Or bu Then Exit Sub
    txt = TextBox1.Text
    lt = Len(TextBox1.Text)
    If ActiveCell.Column = 1 Then
    X = Лист1.Columns(12).SpecialCells(2).Value
    For i = 1 To Лист1.Cells(Rows.Count, 12).End(xlUp).Row
        'If InStr(1, UCase(Лист1.Cells(i, 12)), UCase(TextBox1.Value)) > 0 Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в любом месте текста
        If UCase(txt) = UCase(Mid(Лист1.Cells(i, 12), 1, lt)) Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в начале текста
    Next i
    Else
    X = Лист1.Columns(13).SpecialCells(2).Value
        For i = 1 To Лист1.Cells(Rows.Count, 13).End(xlUp).Row
        'If InStr(1, UCase(Лист1.Cells(i, 12)), UCase(TextBox1.Value)) > 0 Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в любом месте текста
        If UCase(txt) = UCase(Mid(Лист1.Cells(i, 13), 1, lt)) Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в начале текста
    Next i
    End If
    ListBox1.List = Split(s, "~")
End Sub
Изменено: gling - 09.10.2017 22:27:56
 
gling, все красиво,  я я еще добавил столбец изменил макрос, теперь получилось что каждая ячейка выпадающий список и смешались источники данных столбец M и N теперь подставляет из двух столбцов и каждая ячейка стала выпадающей. Объясните тупому ))) какие переменные нужно менять в макросе чтоб например столбец А с выпадающим  списком A брал переменные только с столбца L. Столбец В брал переменные только в столбце M и тд. В моей БОЛЬШОЙ таблице хочу разместить около 15 выпадающих списка.Заранее благодарен. извините за настойчивость  
Изменено: Виктор C - 19.10.2017 20:24:10
 
Друг очень крутое решение. Как раз искал.
А можно его на множественный выбор подточить? Типо:
Столбец 1 Столбец 2
Выбор 1 Выбор 1
Выбор 1 Выбор 2
Выбор 2 Выбор 3
Выбор 2 Выбор 4

Мысли на доработку (не очень понимаю как реализовано):
1) Окно по ширине самого длинного значнеия
2) Повторный выбор в ячейки не работает, если что то выбрал выбрать еще раз
3) Как я понял макрос работает на все ячейки, как ограничить диапазон выдающих значений, если диапазонов и векторов результатов будет несколько?

Было бы очень круто :)
Изменено: phelex - 20.10.2017 07:01:04 (Исправил)
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
phelex, прикольный код
 
А если база на другой странице, например лист2 с первого столбца.. что надо изменить?
 
Цитата
Виктор C написал:
какие переменные нужно менять в макросе
Если много разных списков, тогда лучше так. Переменную назвал НомерСтолбцаДанных (NomStolbDan), чтоб понятно было что менять.
Код
Private Sub TextBox1_Change()
    Dim X, i, txt As String, lt, s As String, NomStolbDan As Long
    If Len(TextBox1.Text) = 0 Or bu Then Exit Sub
    txt = TextBox1.Text
    lt = Len(TextBox1.Text)
    NomStolbDan = ActiveCell.Column + 11
    X = Лист1.Columns(NomStolbDan).SpecialCells(2).Value
    For i = 1 To Лист1.Cells(Rows.Count, NomStolbDan).End(xlUp).Row
        'If InStr(1, UCase(Лист1.Cells(i, NomStolbDan)), UCase(TextBox1.Value)) > 0 Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в любом месте текста
        If UCase(txt) = UCase(Mid(Лист1.Cells(i, NomStolbDan), 1, lt)) Then s = s & X(i, 1) & "~" 'формирует по сочетанию букв в начале текста
    Next i
    ListBox1.List = Split(s, "~")
End Sub

 
Не получается данные из листа 2 брать.Подскажите что в коде надо изменить
 
Вместо Лист1 напишите имя листа с данными Sheets("имя листа").
Изменено: gling - 20.10.2017 00:39:46
 
Разобрался))))
 
Цитата
alex1210 написал:
Разобрался))))
А спасибо где?
Эх молодежь!
 
Так я ещё не всё)))))))
 
Вот просто код у Вас интересный , а почему Вы его так записали? Я просто учусь програмировать и хочу понять как и что
Код
NomStolbDan = ActiveCell.Column + 11
 
Добрый день, уважаемые форумчане. В рамках данной темы у меня давно есть нерешенный вопрос. А именно: в приложенных файлах реализован поиск с выпадающем списком. Если копировать код из файлов-примеров возникает ошибка на отсутствие Textbox1 и Listbox1.  В иных подобных темах ответ звучал, что нужно их создать или скопировать в своем файле. Но ведь Ваши примеры работают без них, либо они скрыты?  И в таком случае как их скопировать из файлов примеров?
Изменено: Ch. - 20.10.2017 17:26:03
 
Цитата
alex1210 написал:
а почему Вы его так записали?
Цитата
gling написал:
Писал не я, где то слямзил, сейчас уже не вспомню.
Но если речь только о переменной, то переменную уже я добавлял.
Могу перевести на русский
Цитата
alex1210 написал:
NomStolbDan = ActiveCell.Column + 11
Это: НомерСтолбцаСДанными=АктивнаяЯчейка.Столбец+11. Если активировать ячейку в столбце А тогда: НомерСтолбцаСДанными=СтолбецА+11=1+11=12=столбец№12=столбец L.
Активируем ячейку столбца В, тогда: НомерСтолбцаСДанными=СтолбецВ+11=2+11=13=столбец№13=столбец М и т.д....
Столбец()=порядковый номер столбца начиная от левого края листа
Изменено: gling - 20.10.2017 19:05:34
 
Понял, спасибо большое
 
Цитата
Ch. написал:
как их скопировать из файлов примеров?
Жмете вкладку Разработчик--Режим конструктора--Ctrl+клик на форму ЛКМ (левой кнопкой мыша)--Копируем (Ctrl+C)--Вставляем (Ctrl+V). Возможно есть и другой вариант, но я делаю так.
 
Спасибо Вам за исчерпывающий ответ.
 
gling, больше спасибо за ваши ответы.

Уточните пожалуйста, а возможно так сделать взаимозависимые списки?
Что для этого требуется?

Спасибо
невозможное делаем сразу, чудо - требует небольшой подготовки.
Страницы: 1 2 3 4 След.
Наверх