Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/VBA combobox с автозаполнением и поиском по мере ввода текст - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
VBA combobox с автозаполнением и поиском по мере ввода текст
RomanCompass Дата: Четверг, 16.09.2021, 13:37 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
Всем привет! В очередной раз обращаюсь к Гуру и Знатокам. Один из лучших форумов по Excel. Спасибо создателям и активным участникам! Есть вопрос..
Создал UserForm в ней есть Combobox, как реализовать поиск по мере ввода?
 
Ответить
СообщениеВсем привет! В очередной раз обращаюсь к Гуру и Знатокам. Один из лучших форумов по Excel. Спасибо создателям и активным участникам! Есть вопрос..
Создал UserForm в ней есть Combobox, как реализовать поиск по мере ввода?

Автор - RomanCompass
Дата добавления - 16.09.2021 в 13:37
Serge_007 Дата: Четверг, 16.09.2021, 13:58 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте

Спасибо за положительный отзыв!
Для подобных тем на сайте есть Книга отзывов yes

как реализовать поиск по мере ввода?
Поиск значений в базе данных по первым буквам при вводе на листе (как в 1С)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте

Спасибо за положительный отзыв!
Для подобных тем на сайте есть Книга отзывов yes

как реализовать поиск по мере ввода?
Поиск значений в базе данных по первым буквам при вводе на листе (как в 1С)

Автор - Serge_007
Дата добавления - 16.09.2021 в 13:58
RAN Дата: Четверг, 16.09.2021, 18:00 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
И тема с абсолютно аналогичным вопросом (автор Мурад) на данный момент в соседях.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИ тема с абсолютно аналогичным вопросом (автор Мурад) на данный момент в соседях.

Автор - RAN
Дата добавления - 16.09.2021 в 18:00
Serge_007 Дата: Пятница, 17.09.2021, 09:24 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВот эта тема: Выбор товара из справочника

Автор - Serge_007
Дата добавления - 17.09.2021 в 09:24
RomanCompass Дата: Вторник, 21.09.2021, 21:49 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
Вот фаил
Кто может помочь ,пожалуйста напишите код в одном из Combobox .
Дальше уже разберусь .
Я новичок, так будет проще когда кто-то тыкнет носом .
К сообщению приложен файл: NEW_PUBLIC.xlsm (118.7 Kb)
 
Ответить
СообщениеВот фаил
Кто может помочь ,пожалуйста напишите код в одном из Combobox .
Дальше уже разберусь .
Я новичок, так будет проще когда кто-то тыкнет носом .

Автор - RomanCompass
Дата добавления - 21.09.2021 в 21:49
Erjoma1981 Дата: Среда, 22.09.2021, 10:51 | Сообщение № 6
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Исправления:
1. Для возможности использования ADODB.Recordset добавил библиотеку Microsoft Activex Data Objects 2.8 Library
2. Добавил глобальную переменную [vba]
Код
Private cmbSource As New ADODB.Recordset
[/vba]
3. В процедуре UserForm_Initialize() изменил
[vba]
Код
'ComboBox_model.MatchEntry = fmMatchEntryFirstLetter
'With Лист2
'    s = .Cells(Rows.Count, 4).End(xlUp).Row
'   ComboBox_model.List = .Range(.Cells(2, 4), .Cells(s, 4)).Value
'End With
      
    ComboBox_model.MatchEntry = fmMatchEntryNone
      
    cmbSource.CursorLocation = adUseClient
    cmbSource.Fields.Append "names", adVarWChar, 128
    cmbSource.Open
    
    s = Лист2.Cells(Rows.Count, 4).End(xlUp).Row
    vData = Лист2.Range(Лист2.Cells(2, 4), Лист2.Cells(s, 4)).Value
    For i = 1 To UBound(vData)
        cmbSource.AddNew
        cmbSource(0).Value = Trim$(vData(i, 1))
    Next
    cmbSource.MoveFirst
    ComboBox_model.Column = cmbSource.GetRows()
[/vba]
4. Изменил процедуру ComboBox_model_Change()
[vba]
Код
Dim indks As Long
    Dim sText As String
     
    sText = Trim$(ComboBox_model.Value)
    indks = ComboBox_model.ListIndex
     
    If Len(sText) = 0 Then
        cmbSource.Filter = ""
    Else
        If indks = -1 Then cmbSource.Filter = "names Like '*" & sText & "*'"
    End If
     
    If cmbSource.RecordCount = 0 Then
        ComboBox_model.List = Array("[не найдено соответствия]")
        Exit Sub
    End If
     
    cmbSource.MoveFirst
    ComboBox_model.Column = cmbSource.GetRows
    ComboBox_model.DropDown
[/vba]

[p.s.]Решение позаимствовано с планеты Excel[/p.s.]
К сообщению приложен файл: NEW_PUBLIC_1.xlsm (130.3 Kb)
 
Ответить
СообщениеИсправления:
1. Для возможности использования ADODB.Recordset добавил библиотеку Microsoft Activex Data Objects 2.8 Library
2. Добавил глобальную переменную [vba]
Код
Private cmbSource As New ADODB.Recordset
[/vba]
3. В процедуре UserForm_Initialize() изменил
[vba]
Код
'ComboBox_model.MatchEntry = fmMatchEntryFirstLetter
'With Лист2
'    s = .Cells(Rows.Count, 4).End(xlUp).Row
'   ComboBox_model.List = .Range(.Cells(2, 4), .Cells(s, 4)).Value
'End With
      
    ComboBox_model.MatchEntry = fmMatchEntryNone
      
    cmbSource.CursorLocation = adUseClient
    cmbSource.Fields.Append "names", adVarWChar, 128
    cmbSource.Open
    
    s = Лист2.Cells(Rows.Count, 4).End(xlUp).Row
    vData = Лист2.Range(Лист2.Cells(2, 4), Лист2.Cells(s, 4)).Value
    For i = 1 To UBound(vData)
        cmbSource.AddNew
        cmbSource(0).Value = Trim$(vData(i, 1))
    Next
    cmbSource.MoveFirst
    ComboBox_model.Column = cmbSource.GetRows()
[/vba]
4. Изменил процедуру ComboBox_model_Change()
[vba]
Код
Dim indks As Long
    Dim sText As String
     
    sText = Trim$(ComboBox_model.Value)
    indks = ComboBox_model.ListIndex
     
    If Len(sText) = 0 Then
        cmbSource.Filter = ""
    Else
        If indks = -1 Then cmbSource.Filter = "names Like '*" & sText & "*'"
    End If
     
    If cmbSource.RecordCount = 0 Then
        ComboBox_model.List = Array("[не найдено соответствия]")
        Exit Sub
    End If
     
    cmbSource.MoveFirst
    ComboBox_model.Column = cmbSource.GetRows
    ComboBox_model.DropDown
[/vba]

[p.s.]Решение позаимствовано с планеты Excel[/p.s.]

Автор - Erjoma1981
Дата добавления - 22.09.2021 в 10:51
RomanCompass Дата: Среда, 22.09.2021, 18:47 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
Erjoma1981, Пытаюсь по вашему сценарию сделать для ComboBox_coutry и что-то не получается .

Беру копирую ваш код процедуры UserForm_Initialize()
С ней меняю имя ComboBox_coutry
Меняю Range столбец на 8
и тоже самое с
Беру копирую ваш код процедуры ComboBox_model_Change()
С ней меняю имя ComboBox_coutry
Меняю Range столбец на 8

И ЧТО-ТО СОВСЕМ НЕ ПОЛУЧАЕТСЯ
 
Ответить
СообщениеErjoma1981, Пытаюсь по вашему сценарию сделать для ComboBox_coutry и что-то не получается .

Беру копирую ваш код процедуры UserForm_Initialize()
С ней меняю имя ComboBox_coutry
Меняю Range столбец на 8
и тоже самое с
Беру копирую ваш код процедуры ComboBox_model_Change()
С ней меняю имя ComboBox_coutry
Меняю Range столбец на 8

И ЧТО-ТО СОВСЕМ НЕ ПОЛУЧАЕТСЯ

Автор - RomanCompass
Дата добавления - 22.09.2021 в 18:47
RAN Дата: Среда, 22.09.2021, 20:40 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Private Sub ComboBox_coutry_Change()
    Dim ar, x, ar1
    ar = Range("Таблица4").Value
    x = ComboBox_coutry.Value
    ReDim ar1(0)
    For i = 1 To UBound(ar)
        If InStr(1, ar(i, 1), x, 1) = 1 Then
        ReDim Preserve ar1(k)
        ar1(k) = ar(i, 1)
        k = k + 1
        End If
    Next
  ComboBox_coutry.List = ar1
  ComboBox_coutry.DropDown
End Sub
[/vba]
И не забудьте удалить весть код из UserForm_Initialize(). От него никакой пользы, окромя вреда.
К сообщению приложен файл: 2003901.xlsm (129.3 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 22.09.2021, 20:41
 
Ответить
Сообщение[vba]
Код
Private Sub ComboBox_coutry_Change()
    Dim ar, x, ar1
    ar = Range("Таблица4").Value
    x = ComboBox_coutry.Value
    ReDim ar1(0)
    For i = 1 To UBound(ar)
        If InStr(1, ar(i, 1), x, 1) = 1 Then
        ReDim Preserve ar1(k)
        ar1(k) = ar(i, 1)
        k = k + 1
        End If
    Next
  ComboBox_coutry.List = ar1
  ComboBox_coutry.DropDown
End Sub
[/vba]
И не забудьте удалить весть код из UserForm_Initialize(). От него никакой пользы, окромя вреда.

Автор - RAN
Дата добавления - 22.09.2021 в 20:40
Erjoma1981 Дата: Четверг, 23.09.2021, 07:59 | Сообщение № 9
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Erjoma1981, Пытаюсь по вашему сценарию сделать для ComboBox_coutry и что-то не получается .


Без файла трудно понять, что у Вас не получается.

И не забудьте удалить весть код из UserForm_Initialize(). От него никакой пользы, окромя вреда.


Неверные выводы, т.к. Вы закомментировали
[vba]
Код

'ComboBox_coutry.MatchEntry = fmMatchEntryFirstLetter
'With Лист2
'    s = .Cells(Rows.Count, 8).End(xlUp).Row
'   ComboBox_coutry.List = .Range(.Cells(2, 8), .Cells(s, 8)).Value
'End With
[/vba].


Сообщение отредактировал Erjoma1981 - Четверг, 23.09.2021, 08:00
 
Ответить
Сообщение
Erjoma1981, Пытаюсь по вашему сценарию сделать для ComboBox_coutry и что-то не получается .


Без файла трудно понять, что у Вас не получается.

И не забудьте удалить весть код из UserForm_Initialize(). От него никакой пользы, окромя вреда.


Неверные выводы, т.к. Вы закомментировали
[vba]
Код

'ComboBox_coutry.MatchEntry = fmMatchEntryFirstLetter
'With Лист2
'    s = .Cells(Rows.Count, 8).End(xlUp).Row
'   ComboBox_coutry.List = .Range(.Cells(2, 8), .Cells(s, 8)).Value
'End With
[/vba].

Автор - Erjoma1981
Дата добавления - 23.09.2021 в 07:59
RAN Дата: Четверг, 23.09.2021, 08:58 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Неверные выводы, т.к. Вы закомментировали

Что вы хотели сказать этой фразой? Что от закоммнентированного фрагмента есть какая то польза?
Если да, то не поделитесь, какая?


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Неверные выводы, т.к. Вы закомментировали

Что вы хотели сказать этой фразой? Что от закоммнентированного фрагмента есть какая то польза?
Если да, то не поделитесь, какая?

Автор - RAN
Дата добавления - 23.09.2021 в 08:58
Erjoma1981 Дата: Четверг, 23.09.2021, 09:12 | Сообщение № 11
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Если попробовать сразу раскрыть список, то он будет пустой.


Сообщение отредактировал Erjoma1981 - Четверг, 23.09.2021, 09:13
 
Ответить
СообщениеЕсли попробовать сразу раскрыть список, то он будет пустой.

Автор - Erjoma1981
Дата добавления - 23.09.2021 в 09:12
Erjoma1981 Дата: Четверг, 23.09.2021, 09:29 | Сообщение № 12
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Переделаны все combobox
К сообщению приложен файл: NEW_PUBLIC_2.xlsm (132.0 Kb)
 
Ответить
СообщениеПеределаны все combobox

Автор - Erjoma1981
Дата добавления - 23.09.2021 в 09:29
Erjoma1981 Дата: Четверг, 23.09.2021, 09:30 | Сообщение № 13
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Переделаны все combobox, используя предложение RAN

[p.s.]Забыл удалить Private Sub ЗаполнениеСписка[/p.s.]
К сообщению приложен файл: NEW_PUBLIC_RUN.xlsm (126.1 Kb)


Сообщение отредактировал Erjoma1981 - Четверг, 23.09.2021, 11:19
 
Ответить
СообщениеПеределаны все combobox, используя предложение RAN

[p.s.]Забыл удалить Private Sub ЗаполнениеСписка[/p.s.]

Автор - Erjoma1981
Дата добавления - 23.09.2021 в 09:30
RomanCompass Дата: Четверг, 23.09.2021, 20:03 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
Erjoma1981 , огромное спасибо за помощь !
Ваш первый вариант Public 1 и Public 2 лучше .
В них есть поиск по любому совпадению и еще при совпадение нескольких элементов выбор стрелкой вниз .
В последнем же варианте не работает совпадение по любому символу и нет возможности выбрать стрелкой из нескольких похожий элементов .
 
Ответить
СообщениеErjoma1981 , огромное спасибо за помощь !
Ваш первый вариант Public 1 и Public 2 лучше .
В них есть поиск по любому совпадению и еще при совпадение нескольких элементов выбор стрелкой вниз .
В последнем же варианте не работает совпадение по любому символу и нет возможности выбрать стрелкой из нескольких похожий элементов .

Автор - RomanCompass
Дата добавления - 23.09.2021 в 20:03
RomanCompass Дата: Четверг, 23.09.2021, 20:31 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
В принципе меня пока что все устраивает , все таки подумываю об...
Как сделать чтобы при наборе нескольких символов и полном совпадение элемента (то есть к примеру набрал Au или Rus Чтобы варианты Austria или Russia заполнялись в combobox так как другие варианты не совпадает.
Можно ли так сделать ?
 
Ответить
СообщениеВ принципе меня пока что все устраивает , все таки подумываю об...
Как сделать чтобы при наборе нескольких символов и полном совпадение элемента (то есть к примеру набрал Au или Rus Чтобы варианты Austria или Russia заполнялись в combobox так как другие варианты не совпадает.
Можно ли так сделать ?

Автор - RomanCompass
Дата добавления - 23.09.2021 в 20:31
Erjoma1981 Дата: Четверг, 23.09.2021, 21:12 | Сообщение № 16
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Erjoma1981 , огромное спасибо за помощь !
Ваш первый вариант Public 1 и Public 2 лучше .
В них есть поиск по любому совпадению и еще при совпадение нескольких элементов выбор стрелкой вниз .
В последнем же варианте не работает совпадение по любому символу и нет возможности выбрать стрелкой из нескольких похожий элементов .


В последнем варианте все завязано на условии [vba]
Код
If InStr(1, ar(i, 1), x, 1) = 1 Then
[/vba]. Если его изменить [vba]
Код
If InStr(1, ar(i, 1), x, 1)>0 Then
[/vba], то будет так же как в первых двух.
 
Ответить
Сообщение
Erjoma1981 , огромное спасибо за помощь !
Ваш первый вариант Public 1 и Public 2 лучше .
В них есть поиск по любому совпадению и еще при совпадение нескольких элементов выбор стрелкой вниз .
В последнем же варианте не работает совпадение по любому символу и нет возможности выбрать стрелкой из нескольких похожий элементов .


В последнем варианте все завязано на условии [vba]
Код
If InStr(1, ar(i, 1), x, 1) = 1 Then
[/vba]. Если его изменить [vba]
Код
If InStr(1, ar(i, 1), x, 1)>0 Then
[/vba], то будет так же как в первых двух.

Автор - Erjoma1981
Дата добавления - 23.09.2021 в 21:12
Erjoma1981 Дата: Четверг, 23.09.2021, 21:20 | Сообщение № 17
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Как сделать чтобы при наборе нескольких символов и полном совпадение элемента (то есть к примеру набрал Au или Rus Чтобы варианты Austria или Russia заполнялись в combobox так как другие варианты не совпадает.
Можно ли так сделать ?


Можно.
Количество отобранных это RecordCount в первых двух примерах, k в последнем.


Сообщение отредактировал Erjoma1981 - Четверг, 23.09.2021, 21:20
 
Ответить
Сообщение
Как сделать чтобы при наборе нескольких символов и полном совпадение элемента (то есть к примеру набрал Au или Rus Чтобы варианты Austria или Russia заполнялись в combobox так как другие варианты не совпадает.
Можно ли так сделать ?


Можно.
Количество отобранных это RecordCount в первых двух примерах, k в последнем.

Автор - Erjoma1981
Дата добавления - 23.09.2021 в 21:20
RomanCompass Дата: Пятница, 24.09.2021, 18:13 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
Erjoma1981, просить уже не удобно и к тому же хотельсь бы самому понять почитать как это далать .
Может подскажите статью где описано подробно .

так как я еще вообще чайник в Excel )
 
Ответить
СообщениеErjoma1981, просить уже не удобно и к тому же хотельсь бы самому понять почитать как это далать .
Может подскажите статью где описано подробно .

так как я еще вообще чайник в Excel )

Автор - RomanCompass
Дата добавления - 24.09.2021 в 18:13
Erjoma1981 Дата: Суббота, 25.09.2021, 00:13 | Сообщение № 19
Группа: Проверенные
Ранг: Участник
Сообщений: 66
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010, 2019
Я сам не очень то знаком с Excel. За советами по книжкам это не ко мне - я ни одной так и не прочел, хотя пытался.
Файл подправил.
К сообщению приложен файл: NEW_PUBLIC_RAN1.xlsm (130.7 Kb)
 
Ответить
СообщениеЯ сам не очень то знаком с Excel. За советами по книжкам это не ко мне - я ни одной так и не прочел, хотя пытался.
Файл подправил.

Автор - Erjoma1981
Дата добавления - 25.09.2021 в 00:13
RomanCompass Дата: Суббота, 02.10.2021, 17:48 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 10 ±
Замечаний: 0% ±

Excel 2016
Erjoma1981, Дружище спасибо !
Автозаполнение работает по совпадаемым символам ,но есть один минус... если к примеру набрал символы Bela ,автозаполнение по совпадению сработало - Belarus . И тут видишь что ошибся последний символ набрал bel-А ,вместо bel-G (BELGIUM). Так вот в таком случае нет возможности BACKSPACE ← стереть несколько символов . ПРИХОДИТЬСЯ БОАТЬ МЫШКУ В РУКИ ВЫДЕЛЯТЬ ВЕСЬ ТЕКСТ И ТОЛКО ТАК УДОЛАТЬ .
Как бы не удобно это :(
 
Ответить
СообщениеErjoma1981, Дружище спасибо !
Автозаполнение работает по совпадаемым символам ,но есть один минус... если к примеру набрал символы Bela ,автозаполнение по совпадению сработало - Belarus . И тут видишь что ошибся последний символ набрал bel-А ,вместо bel-G (BELGIUM). Так вот в таком случае нет возможности BACKSPACE ← стереть несколько символов . ПРИХОДИТЬСЯ БОАТЬ МЫШКУ В РУКИ ВЫДЕЛЯТЬ ВЕСЬ ТЕКСТ И ТОЛКО ТАК УДОЛАТЬ .
Как бы не удобно это :(

Автор - RomanCompass
Дата добавления - 02.10.2021 в 17:48
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!