FIND (Найти все)

Программирование на Visual Basic for Applications
Tecos
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 2
Зарегистрирован: 28.11.2008 (Пт) 22:15

FIND (Найти все)

Сообщение Tecos » 28.11.2008 (Пт) 22:53

Добрый день, знатоки VBA. Помогите, пожалйста мне с решением следующего вопроса:
Необходимо провести поиск по базе данных (лист excell) и все значения, удовлетворяющие условиям поиска поместить в список на главной странице.

Проблема в том, что приведенный ниже код, выбирает только первую, подходящую условиям запись и прекращает свое действие. Что добавить в код, чтобы в список попадали все значения, удовлетворяющие поиску?

Код: Выделить всё
Private Sub CommandButton1_Click()
usl = Sheets("INDEX").TextBox1.Value
Dim rng As Range
Sheets("INDEX").ListBox1.Clear
Set rng = Sheets("BAZA").Range("A1:A65000").Find(What:=usl, LookIn:=xlValues)
If Not (rng Is Nothing) Then
i = Mid(rng.Address, 4)
        kateg = Sheets("BAZA").Cells(i, 1).Value
        vid = Sheets("BAZA").Cells(i, 2).Value
        If kateg <> "" Then Sheets("INDEX").ListBox1.AddItem kateg & " " & vid
     Else
     MsgBox "Значение не найдено!"
     End If
End Sub


Прилиагаю файл с указанным кодом. То есть при условии поиска "фрукт" в список была добавлена строка не только
фрукт абрикос
А все возможные значения:
фрукт яблоко
фрукт абрикос
фрукт апельсин
фрукт персик

Заранее благодарен. Код мне нужен для работы.
Вложения
tecos.xls
(38.5 Кб) Скачиваний: 60

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: FIND (Найти все)

Сообщение Viper » 29.11.2008 (Сб) 7:18

Метод Find и должен возвращать первую найденную ячейку, чтобы найти и другие ячейки, удовлетворяющие критерию поиска, надо воспользоваться методом FindNext. Т.е. первая ячейка ищется методом Find, а далее вызывается метод FindNext до тех пор, пока он не вернет Nothing.
З.Ы. По VBA не специалист, посему предполагаю, что есть более простой способ найти все нужное.
Весь мир матрица, а мы в нем потоки байтов!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Re: FIND (Найти все)

Сообщение KL » 29.11.2008 (Сб) 18:00

Код: Выделить всё
Private Sub CommandButton1_Click()
    Dim rng As Range        'Search range
    Dim rngMatch As Range   'Current match range
    Dim cnt As Long         'Counter
    Dim usl As String       'Match pattern
    Dim i As Long
   
    Set rng = Sheets("BAZA").Range("A:A")
    usl = "*" & Sheets("INDEX").TextBox1.Value & "*"
   
    Application.ScreenUpdating = False
    On Error Resume Next
   
    'Check for matches
    cnt = Application.CountIf(rng, usl)
    If cnt = 0 Then
        MsgBox "Значение не найдено!"
        Exit Sub
    End If
   
    'Find the first match
    Set rngMatch = rng.Find(usl, rng(1), xlValues, xlWhole)
    Sheets("INDEX").ListBox1.AddItem rngMatch & " " & rngMatch.Offset(, 1)
   
    'Loop through the rest of matches
    For i = 1 To cnt - 1
        Set rngMatch = rng.Find(usl, rngMatch, xlValues, xlWhole)
        Sheets("INDEX").ListBox1.AddItem rngMatch & " " & rngMatch.Offset(, 1)
    Next i
    Application.ScreenUpdating = True
End Sub
Привет,
KL

Tecos
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 2
Зарегистрирован: 28.11.2008 (Пт) 22:15

Re: FIND (Найти все)

Сообщение Tecos » 29.11.2008 (Сб) 19:07

KL, спасибо большое, воспользовался Вашим кодом!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList