Страницы: 1
RSS
Поиск значений в ListBox по всей книге и другим файлам. VBA
 
Добрый день!
Есть файл с таблицей. При клике на любую ячейку вылетает форма в которой необходимо выбрать номер столбца. В выбранном столбце происходит поиск всех непустых ячеек и все результаты помещаются в ListBox.
Как далее при нажатие на кнопку "Поиск" поочередно производить поиск значений из ListBox во всей книге или других файлах, к которым я укажу путь в дальнейшем?
 
1. Вы собираетесь указать папку с файлами, из которой требуется во всех ячейках всех листов всех книг найти все значения из ListBox-а? Или указать избранные файлы из какой-либо одной папки?
2. Искать полное или частичное совпадение?
3. Что является результатом поиска? Имя Книги? Имя листа? Адрес ячейки?
4. Куда собирать (выводить) результаты поиска?
Чем шире угол зрения, тем он тупее.
 
1. Изначально я бы начал с поиска в данной книге. Далее можно рассмотреть варианты с поиском в других файлах в этой же папке, где лежит файл. Искать из ListBox
2  Искать полное совпадение
3. Результатом хочу чтобы поиск перешел на на лист в книге и показал ту ячейку, которую нашел.
4. Собирать и выводить результаты не планировал.

Каким образом можно выводить в Listbox помимо номера из левого столбца еще и, то что он там нашел?
Далее то что программа найдет будет определять страницу или книгу в которой необходимо будет производить поиск. И это очень важный момент.
 
Цитата
Alekseytro написал: 1.Изначально я бы начал с поиска в данной книге.
В модуль формы
Код
Private Sub CommandButton1_Click()
If Me.ListBox1.Value = Empty Then Exit Sub
Dim Sh As Worksheet
On Error Resume Next
For Each Sh In Worksheets
    If Sh.Name <> "Лист1" Then
        Set FindCell = Sh.UsedRange.Find(Me.ListBox1.Value, LookIn:=xlValues)
        If Not FindCell Is Nothing Then
            Sh.Select
            FindCell.Select
            Unload Me
            Exit Sub
        End If
    End If
Next
MsgBox "Значение не найдено!", vbCritical + vbOKOnly
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
В модуль формы
Добавил. Ошибку не дает это уже хорошо.
Но не работает так как надо. После нажатия "поиск" выводит сообщение "Значение не найдено"
 
Поиск производится во всей книге КРОМЕ листа, в котором расположена Ваша табличка. Или нужно как-то подругому?
В файле выберите столбец  H5 и значение 56218
Изменено: Sanja - 12.12.2016 16:56:44
Согласие есть продукт при полном непротивлении сторон
 
Посмотрите пример во вложении.
Я взял на себя смелость сделать так, как, на мой взгляд, более удобно.
1. После выбора значения из ComboBox-а, в Listbox-е отобразятся все удовлетворяющие условию значения.
2. При нажатии кнопки "Поиск", отобразится еще один ListBox со всеми найденными значениями по всем листам и всем ячейкам (кроме исходного листа).
3. Кликнув на интересующую Вас строку этого ListBox-а, осуществится переход на соответствующую ячейку соответствующего листа. При этом, форма не закрывается, т. е. можно перебирать имеющиеся строки ListBox-а.
4. При клике в ComboBox-е, будет скрыт ListBox с найденными ранее значениями и отображен исходный лист. Т. е.все готово к новому поиску.
5. Форму закрывайте самостоятельно, по мере надобности.

А вот следующее:
Цитата
Каким образом можно выводить в Listbox помимо номера из левого столбца еще и, то что он там нашел?
мне не понятно. Что там можно найти? Только то, что мы искали, т. е. номера из 1-го ListBox-а. Что и куда еще нужно выводить?
Осмелюсь предположить, что Вы имели ввиду значения непустых ячеек в исходной таблице. Т. е. "M1", "M2" и т. п.
Если так, то это реализовано в примере.
Если Вас что-то не устраивает (или я не угадал) - укажите, как нужно сделать.
Изменено: SAS888 - 13.12.2016 07:13:11
Чем шире угол зрения, тем он тупее.
 
Цитата
SAS888 написал:
Если Вас что-то не устраивает (или я не угадал) - укажите, как нужно сделать.
Все именно так как я и хотел. Большое спасибо!

А каким образом можно производить поиск в других книгах?
 
Укажите, каким образом задавать условия поиска.
1. Просматривать все книги в той же папке, где находится файл с макросом.
2. Через диалоговое окно указать папку и искать во всех файлах из этой папки.
3. Через диалоговое окно указать конкретные файлы (мультивыбор), в которых требуется искать совпадения.
4. Как-то по другому.
Если по пунктам 1 или 2, то что делать с возможными вложенными папками? Какова глубина поиска в подпапках?
Чем шире угол зрения, тем он тупее.
 
Посмотрите следующий вариант.
Будет предложено выбрать папку. После выбора будет произведен поиск по всем листам по всех файлах в этой папке. Поиск в самом файле с макросом проводиться не будет, не зависимо от его расположения.
Представление результатов поиска и работа с ними не изменилась.
Что не устраивает?
Изменено: SAS888 - 13.12.2016 10:08:56
Чем шире угол зрения, тем он тупее.
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Вариант хороший, но так сложно не требуется.
Папка будет одна. и в ней будут лежать все необходимые книги.
Нужно искать по содержимому непустой ячейки. Если в ячейке М1, то книга1, если М2, то книга2, если М3 и т. д.
 
А что не устраивает в предложенном варианте?
Выбираете папку и получаете все результаты. Переходы осуществляются. Все Ваши требования выполняются.
Чем шире угол зрения, тем он тупее.
 
Есть несколько книг, например 5. Книги называются М1, М2, М3, М4 и М5.
Мы находим непустую ячейку М1 с значением "1234" (Левый столбец). Далее мы выбираем папку с книгами в которых будем производить поиск и находим множество совпадений. Я хочу увидеть где он нашел это значение в книге М1, а сейчас он находит это значение и в книгах М2, М3, М4, М5, а это лишняя информация.

Можно конкретизировать поиск исходя из найденного в непустой ячейки. Например если в непустой ячейке М1, то ищет только в файле М1.xls выбранной папки?
Страницы: 1
Наверх