Vba excel поиск в listbox
Доброго времени суток! Господа хорошие! Подскажите пожалуйста! я ввожу фамилию по буквам в textbox и получаю результат поиска из столбца "С:C"
и хочу полученный результат поиска в listBox в два столбика ИМЯ и Фамилия (Имена Столбец "B:B" фамилии"C:C") и если можно дописать макрос что бы в textbox можно было либо имя либо фамилию и он искал по любому из параметров!
Private Sub Списоклюдей_Change()
Dim txt As String, lt As Long, s As String, v, y, i, z As String
txt = Списоклюдей.Text: lt = Len(txt)
If lt = 0 Then Exit Sub
x = Range("C4", Cells(Rows.Count, 3).End(xlUp)).Value 'Фамилии
y = Range("B4", Cells(Rows.Count, 2).End(xlUp)).Value 'Имена
For i = 1 To UBound(x, 1) 'поиск по любому вхождению
If InStr(x(i, 1), txt) Then s = s & "~" & x(i, 1): z = z & "~" & y(i, 1)
Next i
With Me.Список
.ColumnHeads = False
.ColumnCount = 2
.ColumnWidths = "60;50"
.AddItem
.List = Split(Mid(s, 2), "~")
' Список.List = Split(Mid(z, 2), "~") ' тут не получается
End With
End Sub
Private Sub Список_Click()
'If Список.ListIndex = -1 Then Exit Sub
On Error Resume Next
ActiveSheet.ShowAllData
Range("C:C").Find(Список, lookat:=xlWhole).Activate ' в listbox поиском выводиться фамилии. и по нажатию на неё он выделяет ячейку с первой найденной фамилией а нужно по двум критериям по фамилии и имени из listbox!
End Sub
Доброго времени суток! Господа хорошие! Подскажите пожалуйста! я ввожу фамилию по буквам в textbox и получаю результат поиска из столбца "С:C"
и хочу полученный результат поиска в listBox в два столбика ИМЯ и Фамилия (Имена Столбец "B:B" фамилии"C:C") и если можно дописать макрос что бы в textbox можно было либо имя либо фамилию и он искал по любому из параметров!
Private Sub Списоклюдей_Change()
Dim txt As String, lt As Long, s As String, v, y, i, z As String
txt = Списоклюдей.Text: lt = Len(txt)
If lt = 0 Then Exit Sub
x = Range("C4", Cells(Rows.Count, 3).End(xlUp)).Value 'Фамилии
y = Range("B4", Cells(Rows.Count, 2).End(xlUp)).Value 'Имена
For i = 1 To UBound(x, 1) 'поиск по любому вхождению
If InStr(x(i, 1), txt) Then s = s & "~" & x(i, 1): z = z & "~" & y(i, 1)
Next i
With Me.Список
.ColumnHeads = False
.ColumnCount = 2
.ColumnWidths = "60;50"
.AddItem
.List = Split(Mid(s, 2), "~")
' Список.List = Split(Mid(z, 2), "~") ' тут не получается
End With
End Sub
Private Sub Список_Click()
'If Список.ListIndex = -1 Then Exit Sub
On Error Resume Next
ActiveSheet.ShowAllData
Range("C:C").Find(Список, lookat:=xlWhole).Activate ' в listbox поиском выводиться фамилии. и по нажатию на неё он выделяет ячейку с первой найденной фамилией а нужно по двум критериям по фамилии и имени из listbox!
End Sub
Говори о чём думаешь! НО думай прежде чем о чем то говорить!
Private Sub Списоклюдей_Change()
Dim txt As String, lt As Long, s As String, v, y, i, z As String
txt = Списоклюдей.Text: lt = Len(txt)
If lt = 0 Then Exit Sub
x = Range("C4", Cells(Rows.Count, 3).End(xlUp)).Value 'Фамилии
y = Range("B4", Cells(Rows.Count, 2).End(xlUp)).Value 'Имена
For i = 1 To UBound(x, 1) 'поиск по любому вхождению
If InStr(x(i, 1), txt) Then s = s & "~" & x(i, 1): z = z & "~" & y(i, 1)
Next i
With Me.Список
.ColumnHeads = False
.ColumnCount = 2
.ColumnWidths = "60;50"
.AddItem
.List = Split(Mid(s, 2), "~")
' Список.List = Split(Mid(z, 2), "~") ' тут не получается
End With
End Sub
Private Sub Список_Click()
'If Список.ListIndex = -1 Then Exit Sub
On Error Resume Next
ActiveSheet.ShowAllData
Range("C:C").Find(Список, lookat:=xlWhole).Activate ' в listbox поиском выводиться фамилии. и по нажатию на неё он выделяет ячейку с первой найденной фамилией а нужно по двум критериям по фамилии и имени из listbox!
End Sub
Синхронизировать текст в двух TextBox при наборе
Всем привет! У меня в программе есть два textbox-а. Если отметить галку копировать, то когда.
Поиск в ListBox через TextBox
Всем привет! Есть такая задача, у нас есть в Форме: 4 ListBox с данными, 1 Textbox, Button.
Поиск по Listbox, используя textBox
Добрый день! Знаю, что организовать поиск по листбоксу можно следующим способом: private.
Поиск в ListBox через TextBox
Всем привет! Как сделать так чтобы при запуске словаря можно было выбором из ListBox сразу.
ну выводите каку-то всплывающую подсказку со списком регионов в которых встречается слово, которое вы вводите.
Решение
вот идеальный вариант безовсяких "велосипедов"
ListBox1 содержит полный список, в ListBox2 выводится результат поиска
ну а если нужен один листбокс, тогда хранить список где-то в переменной и заполнять ваш ListBox найденными знаечениями, в том случае, если в TextBox что-то введено, иначе выводить вечь массив на показ пользователю.
kritjara, Да, именно это. Список накладно создавать будет так как вы его создаете. Вариант хранить все в строку с разделителем и через split получать массив. Либо грузить этот список из файла, что гораздо удобнее в дальнейшем, при внесении изменений в рабочие данеые программы.
Yury Komar, 'nj так удобней и быстрей было написать код
любой понимающий программист список будет создавать по-своему
Здравствуйте!
Применил код от 27.09.16. Не совсем получается. Т.е. при вводе в текстбокс выделяется только первая по порядку совпадающая строка. Например в листбоксе первым записано dsdssd и при вводе в текстбокс букв dsd она выделяется. Это хорошо. Но если где-нибудь в конце листбокса есть строка просто dsd, то она не находится, т.к. она записана в листбоксе ниже. Или например: первым записано ЛЛЛ.555.444-01 (она выделяется при вводе символов в текстбоксе), а в конце листбокса есть ЛЛЛ.555.444 (и эта запись уже не выделится). А надо найти именно её.
Сразу скажу - в VB соображаю мало (очень), все коды искал в сети.
Помогите, пожалуйста, с поиском по ListBox и выделением строки в ListBox.
На форме есть TextBox, ListBox и Label.
При запуске формы в ListBox загружаются строки из столбца листа "База":
При вводе в TextBox символов происходит поиск совпадений в ListBox, и в самом ListBox остаются результаты совпадений:
Также при выделении строки в ListBox в Label добавляется информация из ячеек листа "База":
Проблема - если после выделения строки в ListBox (и соответствующего копирования ячеек из листа "База" в Label6) в после TextBox попытаться удалить Backspace'ом символы и ввести другие, то появляется ошибка "Run-time error 1004" в блоке ListBox1_Change:
Помогите, пожалуйста, решить проблему.
Пробовал очищать ListBox и TextBox кнопкой и сбрасывать выделение строки в ListBox, но ошибка всё-равно появляется
При выделении строки в ListBox отображать ее в Edit, где можно отредактировать и заменить в ListBox-е
Подскажите пожалуйста как зделать задачку:При выделении строки в поле ListBox даная строка.
Показ Listbox при выделении ячейки, а не строки
Добрый день. Подскажите пожалуйста. Private Sub Worksheet_SelectionChange(ByVal Target As Range).
При выделении строки в ListBox (загружено из БД) вылетает ошибка
Такая проблема, вывожу данные с базы в listbox и при выделении какой-либо записи вывести всю инфу.
Listbox Обработка События При Выделении Объекта Из Списка
Добрый день, Подскажите пожалуйста где в Lotus найти обработку события при выделении значения из.
Был в командировке, только сегодня приехал.
Не загружается файл, формат .xlsm не поддерживается.
Решение
При вводе чего бы то ни было в текстбокс срабатывает событие "TextBox10_Change"
В коде которого написано "ListBox1.Clear" (кроме всего прочего)
Эта команда очищает листбокс, удаляя все строки.
А во время удаления листбокса срабатывает событие "ListBox1_Change"
В котором написано, кроме прочего:
То есть мы имеем: листбокс только что очистился, количество строк у него - 0 (это фактически, но свойство "ListBox1.ListIndex" становится равным "-1")
Далее вы к этому значению "-1" прибавляете единицу строкой кода "roww = roww + 1"
Что при этом получается? Правильно, получается ноль. Пока ничего опасного нет. Ноль - это тоже результат вычисления и с ним можно много чего поделать, но далее вы делаете это:
"Label16.Caption = Worksheets("База").Cells(roww, 7).Value & " " & Worksheets("База").Cells(roww, 8).Value _
& ", рег. № " & Worksheets("База").Cells(roww, 10).Value"
То есть вы обращаетесь к ячейке с адресом строка номер 0 и столбец номер 7.
А в листе экселя строки начинаются с 1. Вот вам и ошибка.
Обращение к недопустимой ячейке.
Кстати, прикольный у вас получился поисковый фильтр! Достаточно элегантное решение, хотя если база разрастётся до нескольких тысяч строк, то такой поиск может начать притормаживать. good:
То есть мы имеем: листбокс только что очистился, количество строк у него - 0 (это фактически, но свойство "ListBox1.ListIndex" становится равным "-1")
Далее вы к этому значению "-1" прибавляете единицу строкой кода "roww = roww + 1"
Что при этом получается? Правильно, получается ноль. Пока ничего опасного нет. Ноль - это тоже результат вычисления и с ним можно много чего поделать, но далее вы делаете это:
"Label16.Caption = Worksheets("База").Cells(roww, 7).Value & " " & Worksheets("База").Cells(roww, 8).Value _
& ", рег. № " & Worksheets("База").Cells(roww, 10).Value"
То есть вы обращаетесь к ячейке с адресом строка номер 0 и столбец номер 7.
А в листе экселя строки начинаются с 1. Вот вам и ошибка.
Обращение к недопустимой ячейке.
В этом направлении я и думал, только вот по порядку сформулировать не получалось, как и решение найти.
Добавлено через 1 минуту
Кстати, прикольный у вас получился поисковый фильтр! Достаточно элегантное решение, хотя если база разрастётся до нескольких тысяч строк, то такой поиск может начать притормаживать.
Код взял из этой темы Как сделать поиск по ListBox слова введеного в textBox
А насчет большой базы - завтра как раз и попробую, кол-во строк будет где-то 200-220. Отпишусь, как пройдет
А если освоить функционал Watch, позволяющий останавливать код при выполнении настраиваемого условия (икс, на который вскоре надо будет делить стал равен нулю например), то вообще начинаешь считать бейсик своим другом, а не сволочью, которой вечно что-то да не нравится =)))
Попробовал сейчас 230 строк записать в ListBox - поиск идёт без тормозов.
Возникла проблема (вполне логичная) - при выделении строки в ListBox после поиска копируются данные строки, соответствующей таковой в столбце. То есть копирование идет на основе id ячейки, что опять же логично, исходя из кода.
Как сделать так, чтобы при выделении строки копировалась ячейка, связанная именно с "содержимым" строки? Т.е. данные не третьей строки, а двадцать третьей.
Как сделать поиск определенного слова по базе и вывести все данные в TextBox?
Как сделать поиск определенного слова (допустим возьмем из текстбокса) по базе и вывести все данные.
Как сделать чтоб выводил не в listBox, а в textBox данные из столбцов таблицы mysql?
Как сделать чтоб выводил не в listBox, а в textBox данные из столбцов таблицы mysql? .
Как сделать проверку введеного пароля?
Как сделать так чтобы при вводе пароль запоминался, а после этого при запросе ввести введенный.
Проще делать наоборот: при вводе слова в текстбокс (если введена хоть одна буква)
Производить поиск в диапазоне .RowSource = "A2:F100". По совпадению или по началу. Как больше нравится. А вот найденные значения выводить в список. Причём именно значения а не ссылку на диапазон
Добавлено через 7 минут
пример:
ищет только по первому столбцу ) если ввести скажем что нить из столбца Цена ) то выдает ошибку Run-time Erros 380) и еще я не нашел Sort ) его вручную кодом писать?
Проще делать наоборот: при вводе слова в текстбокс (если введена хоть одна буква)
Производить поиск в диапазоне .RowSource = "A2:F100". По совпадению или по началу. Как больше нравится. А вот найденные значения выводить в список. Причём именно значения а не ссылку на диапазон
Добавлено через 7 минут
пример:
да испробовал ) ищет только по первому столбцу, если написать значение из другого столбца то выдает ошибку Run-time Erros 380
Ну собственно я и полагал (уж извините проверить не могу у меня без этого вагон проблем)
в сам listbox можно забрасывать список из колонки excel-я ну это я вижу никто не пользует
а уже при поиске писать то что ищем, и вылавливаем реакцию
обычно при совпадении изменяется значение .listindex я его подчеркнул
Для того чтобы искало по всем столбцам можно сделать так:
И ещё будет 10 страниц переписки, пока будешь думать, что задаёшь вопросы на форуме по фотошопу или на форуме экстрасенсов.
Не получается - приложи файл! уже б и забыл про вопрос!
ЗАЧЕМ чистить листбокс.
И ошибку не выдаёт! Можешь верить, можешь не верить. Но второй раз набивать таблицу, что бы тебе что-то доказать мне лениво!
Добавлено через 9 минут
и убери эту строку!
в моём случае она не нужна 100%
А если хочешь всё-таки искать в списке, то заполняй список значениями, а не ссылкой на источник
Добавлено через 24 минуты
1. при вводе в верхнее поле в список попадают все ячейки с их значениями и адресами.
2. при выборе значения в списке ячейка в диапазоне выделяется а в нижнее поле выводится строка
3. при пустом верхнем поле список и нижнее поле скрываются
4. список не надо не редактировать не очищать!
Добрый день! Не могу найти проблему в коде. Работает через раз.
Суть вот в чем: организован небольшой поиск через Листбокс. На Форме1 - заполнение всех данных. На Форме2 - возможность более быстрого поиска. При выборе на Форме2 - переход на Форму1 и выделение соответствующей строки.
Добрый день! Не могу найти проблему в коде. Работает через раз.
Суть вот в чем: организован небольшой поиск через Листбокс. На Форме1 - заполнение всех данных. На Форме2 - возможность более быстрого поиска. При выборе на Форме2 - переход на Форму1 и выделение соответствующей строки. Dмитрий
Немного модеренизировал и убрал ошибку.
Задержка нужна доля предотвращения клика по листбоксу1 doober
doober, Спасибо за помощь. В файле примере работает все как должно быть. Перенес в оригинал - та же песня.
Почему не работает если записать в одну процедуру, например вот так:
[vba]
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'lr1 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
Dim R As Integer ', wr As Integer
R = ListBox1.List(ListBox1.ListIndex, 0)
For n = 0 To UserForm1.ListBox1.ListCount - 1
If Val(UserForm1.ListBox1.List(n, 3)) = R Then
UserForm1.ListBox1.Selected(n) = True
End If
Next
'UserForm1.Calc R
UserForm2.Hide
doober, Спасибо за помощь. В файле примере работает все как должно быть. Перенес в оригинал - та же песня.
Почему не работает если записать в одну процедуру, например вот так:
[vba]
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'lr1 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
Dim R As Integer ', wr As Integer
R = ListBox1.List(ListBox1.ListIndex, 0)
For n = 0 To UserForm1.ListBox1.ListCount - 1
If Val(UserForm1.ListBox1.List(n, 3)) = R Then
UserForm1.ListBox1.Selected(n) = True
End If
Next
'UserForm1.Calc R
UserForm2.Hide
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'lr1 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
Dim R As Integer ', wr As Integer
R = ListBox1.List(ListBox1.ListIndex, 0)
For n = 0 To UserForm1.ListBox1.ListCount - 1
If Val(UserForm1.ListBox1.List(n, 3)) = R Then
UserForm1.ListBox1.Selected(n) = True
End If
Next
'UserForm1.Calc R
UserForm2.Hide
а почему не реализовать поиск прямо в этой форме?
добавляете текстбокс на форму и дописываете эвент
Private Sub TextBox1_Change()
Dim SText As String 'текст для поиска
Dim LText As String 'текст в котором ищем
Dim RowCount As Long ' кол-во строк в листбоксе
Dim ColCount As Long 'кол-во колонов к листбоксе
Dim Ci, Cj 'счетчики
RowCount = ListBox1.ListCount
ColCount = ListBox1.ColumnCount
SText = CStr(TextBox1.Value)
For Ci = 0 To RowCount - 1
For Cj = 1 To ColCount - 1
LText = CStr(ListBox1.List(Ci, Cj))
If InStr(1, LText, SText, 1) Then
ListBox1.ListIndex = Ci
Exit Sub
End If
Next Cj
Next Ci
End Sub
а почему не реализовать поиск прямо в этой форме?
добавляете текстбокс на форму и дописываете эвент
Private Sub TextBox1_Change()
Dim SText As String 'текст для поиска
Dim LText As String 'текст в котором ищем
Dim RowCount As Long ' кол-во строк в листбоксе
Dim ColCount As Long 'кол-во колонов к листбоксе
Dim Ci, Cj 'счетчики
RowCount = ListBox1.ListCount
ColCount = ListBox1.ColumnCount
SText = CStr(TextBox1.Value)
For Ci = 0 To RowCount - 1
For Cj = 1 To ColCount - 1
LText = CStr(ListBox1.List(Ci, Cj))
If InStr(1, LText, SText, 1) Then
ListBox1.ListIndex = Ci
Exit Sub
End If
Next Cj
Next Ci
End Sub
Private Sub TextBox1_Change()
Dim SText As String 'текст для поиска
Dim LText As String 'текст в котором ищем
Dim RowCount As Long ' кол-во строк в листбоксе
Dim ColCount As Long 'кол-во колонов к листбоксе
Dim Ci, Cj 'счетчики
RowCount = ListBox1.ListCount
ColCount = ListBox1.ColumnCount
SText = CStr(TextBox1.Value)
For Ci = 0 To RowCount - 1
For Cj = 1 To ColCount - 1
LText = CStr(ListBox1.List(Ci, Cj))
If InStr(1, LText, SText, 1) Then
ListBox1.ListIndex = Ci
Exit Sub
End If
Next Cj
Next Ci
End Sub
Не поверите, но на этой форме попросту уже нет места. Да и не все там так просто. Я представил лишь 10 часть. Второй формой, гораздо нагляднее, короче, без нее НИКАК. Очень жаль, казалось, вопрос то не сложный, но.
Не поверите, но на этой форме попросту уже нет места. Да и не все там так просто. Я представил лишь 10 часть. Второй формой, гораздо нагляднее, короче, без нее НИКАК. Очень жаль, казалось, вопрос то не сложный, но. Dмитрий
Всем спасибо. С задержкой работает. Без нее - нет. Каким боком она влияет, непонятно. Может кто-нибудь объяснить. Так все в норме. Тему можем закрывать.
Может дело совсем не в задержке, а в чем то еще.
Всем спасибо. С задержкой работает. Без нее - нет. Каким боком она влияет, непонятно. Может кто-нибудь объяснить. Так все в норме. Тему можем закрывать.
Может дело совсем не в задержке, а в чем то еще. Dмитрий
Если вы вторую форму переместите вправо,то все будет работать.
Двойной клик в форме 2,она прячется,ваша мышка на первом листбоксе,вы по инерции еще кликаете по первому листбоксу
Если вы вторую форму переместите вправо,то все будет работать.
Двойной клик в форме 2,она прячется,ваша мышка на первом листбоксе,вы по инерции еще кликаете по первому листбоксу doober
Огромное спасибо! Все никак не мог сделать поиск в своей форме.
Ваш код - самое то для меня!
Огромное спасибо! Все никак не мог сделать поиск в своей форме.
Ваш код - самое то для меня! urlchik
Огромное спасибо! Все никак не мог сделать поиск в своей форме.
Ваш код - самое то для меня! Автор - urlchik
Дата добавления - 12.12.2017 в 17:59
millik, А не подскажите, как реализовать этот поиск с поиском следующего значения? Т.е например: 2 столбца: 1. Город, 2. Рейс автобуса. В Москву идет несколько рейсов. При использовании Вашего поиска на форме находит только первое совпадение "Москва" - рейс 21, Нужно найти второе "Москва" - рейс 122. Можно ли это как-то реализовать? Ну например кнопку добавить "Искать далее" и т.п.
millik, А не подскажите, как реализовать этот поиск с поиском следующего значения? Т.е например: 2 столбца: 1. Город, 2. Рейс автобуса. В Москву идет несколько рейсов. При использовании Вашего поиска на форме находит только первое совпадение "Москва" - рейс 21, Нужно найти второе "Москва" - рейс 122. Можно ли это как-то реализовать? Ну например кнопку добавить "Искать далее" и т.п.
Заранее благодарен! Автор - urlchik
Дата добавления - 14.12.2017 в 18:05
Читайте также: