Страницы: 1
RSS
Подправить код ListBox
 
Уважаемые корифеи написания програмного кода)
Есть диапазон:
1 апельсин
2 груша
3 яблоко
4 апельсин
....и т.д. (2 столбца)

Есть следующий код поиска в диапазоне (брал с форума. Но где, до сих пор найти не могу):

Код
Private Sub ОКНО_ПОИСКА_Change()
Call Find_Value(ОКНО_ПОИСКА.Value & "*", Range("ДИАПАЗОН"))
End Sub

-начинаем вводить текст в окно поиска, выполняется следующее:

Код
End SubPrivate Sub Find_Value(sValue As String, rFindRange As Range)
If sValue = "*" Then ListBox1.Clear:  Exit Sub
Dim rFndRng As Range
Dim sAddress As String
Set rFndRng = rFindRange.Find(what:=sValue, LookIn:=xlValues, lookat:=xlWhole)
If rFndRng Is Nothing Then Exit Sub
ListBox1.Clear
sAddress = rFndRng.Address
Do
ListBox1.AddItem rFndRng
Set rFndRng = rFindRange.FindNext(rFndRng)
Loop While sAddress <> rFndRng.Address
End Sub

-поиск с выводом искомого значения в ListBox1

Код
Private Sub ListBox1_Click()
On Error Resume Next
[a1] = Range("ДИАПАЗОН").Find(what:=ListBox1.Value, LookIn:=xlValues, lookat:=xlWhole).Value

-при клике на найденые данные, в [a1] выводится найденое значение из ListBox1

НАДО: чтобы в [a1] выводился № найденого значения из диапазона. Например - (rFndRng.Offset(0,-1).Value). Куда добавить этот сдвиг? Пытался создать 2 столбца в ListBox1 (во втором коде после DO), первому присвоить (rFndRng.Offset(0,-1).Value) с шириной 0 чтоб не отображался, во втором (rFndRng). Тогда Private Sub ListBox1_Click наверное бы сработал...
Но очень туго с синтаксисом - не вышло... Помогите

P.S. - простите, если дублирую тему)

P.S.2 - в диапазоне бывают одинаковые значения в 2 столбце, поэтому строго нужен их номер из 1 столбца диапазона в ячеку [a1].
 
Попытался написать сам по другому - не выходит...


Код
Private Sub Find_Value(sValue As String, rFindRange As Range)
If sValue = "*" Then ListBox1.Clear:  Exit Sub
Dim N As Long
Dim rFndRng As Range
N = 0
Set rFndRng = rFindRange.Find(what:=sValue, LookIn:=xlValues, lookat:=xlWhole)
With ListBox1
For N = 0 To Me.ListBox1.ListCount - 1
If rFndRng Is Nothing Then GoTo Clear
Do
.AddItem ""
.List(N, 0) = rFndRng.Offset(0, -1).Value
.List(N, 1) = rFndRng
N = N + 1
End If
Set rFndRng = rFindRange.FindNext(rFndRng)
Next
End With
Clear: ListBox1.Clear
End Sub
 
Цитата
Гена Рыбалкин пишет:
поэтому строго нужен их номер из 1 столбца
Поэтому строго нужен Ваш файл с этим макросом.
 
Код, судя по всему был написан мной.
Для того, чтобы записывать данные в ЛистБокс в несколько столбцов необходимо свойству ЛистБокса ColumnCount присвоить значение с нужным кол-вом столбцов(для Вашего примера 2).
Эту часть кода надо будет поменять:
Код
Do
ListBox1.AddItem rFndRng
Set rFndRng = rFindRange.FindNext(rFndRng)
Loop While sAddress <> rFndRng.Address


Где-то так:
Код
dim li as long
Do
ListBox1.AddItem ""
ListBox1.List(li,0) = rFndRng.Offset(,-1).Value
ListBox1.List(li,1) = rFndRng.Value
li = li + 1
Set rFndRng = rFindRange.FindNext(rFndRng)
Loop While sAddress <> rFndRng.Address
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Где-то так:
- выкидывает ошибку.
 
Вот пробуйте
 
1. Надо было убрать ошибку синтаксиса - после Value был пробел, который надо было удалить.
2. У Вас поиск идет в диапазоне DATALIST(=Лист1!$A$1:$B$10), а Вы в коде хотите от этого диапазона взять данные, на три столбца левее: ListBox1.List(li, 0) = rFndRng.Offset(0, -3).Value.
Как Вы хотите, чтобы это работало?
Подправил так, как считал правильным.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Три столбца левее - это да, на быструю руку переносил форму и код из другого документа...
А про пробел, спасибо!!!
Страницы: 1
Наверх