Всем доброго дня! Возникла проблема с созданием формы поиска, нашла нужный вариант, но вот под себя никак не получается исправить, опыта работы с VBA практически нет. Смысл таков: есть база номеров, на отдельный номер создается вкладка, где заполняются детали.
Необходимо: 1. поиск деталей по всей книге 2. вывод результатов поиска в окошке (это делается), но чтобы из этого списка можно было выбрать и перейти на соответствующий лист.
3. Поиск идет с совпадением с начала наименования. Не ищет частичные совпадения ((
Поиск который нашла я ищет только на активном листе и соответственно гиперссылки не используются. Поиск осуществляется чрез отдельную форму.
Вот код:
[vba]
Код
Private Sub TextBox1_Change() Dim j As Long, i As Long, poisk As Range, iAdr$, LT% ListBox1.Clear LT = Len(TextBox1.Value) If LT = 0 Then Exit Sub j = 0 iAdr = ActiveSheet.UsedRange.Address iAdr = Mid(iAdr, InStr(iAdr, ":") + 1) For Each poisk In ActiveSheet.Range("A1:" & iAdr) If UCase(Left(poisk, LT)) = UCase(TextBox1.Value) Then ListBox1.AddItem poisk.Address ListBox1.List(j, 1) = poisk j = j + 1 End If Next End Sub
Private Sub ListBox1_Click() If ListBox1.ListIndex = -1 Then Exit Sub Range(ListBox1).Select End Sub
[/vba]
Заранее огромное спасибо.
Всем доброго дня! Возникла проблема с созданием формы поиска, нашла нужный вариант, но вот под себя никак не получается исправить, опыта работы с VBA практически нет. Смысл таков: есть база номеров, на отдельный номер создается вкладка, где заполняются детали.
Необходимо: 1. поиск деталей по всей книге 2. вывод результатов поиска в окошке (это делается), но чтобы из этого списка можно было выбрать и перейти на соответствующий лист.
3. Поиск идет с совпадением с начала наименования. Не ищет частичные совпадения ((
Поиск который нашла я ищет только на активном листе и соответственно гиперссылки не используются. Поиск осуществляется чрез отдельную форму.
Вот код:
[vba]
Код
Private Sub TextBox1_Change() Dim j As Long, i As Long, poisk As Range, iAdr$, LT% ListBox1.Clear LT = Len(TextBox1.Value) If LT = 0 Then Exit Sub j = 0 iAdr = ActiveSheet.UsedRange.Address iAdr = Mid(iAdr, InStr(iAdr, ":") + 1) For Each poisk In ActiveSheet.Range("A1:" & iAdr) If UCase(Left(poisk, LT)) = UCase(TextBox1.Value) Then ListBox1.AddItem poisk.Address ListBox1.List(j, 1) = poisk j = j + 1 End If Next End Sub
Private Sub ListBox1_Click() If ListBox1.ListIndex = -1 Then Exit Sub Range(ListBox1).Select End Sub
Option Explicit Option Compare Text Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Dim j As Long, i As Long, poisk As Range, iAdr$, LT%, sh As Worksheet ListBox1.Clear LT = Len(TextBox1.Value) If LT = 0 Then Exit Sub j = 0 iAdr = ActiveSheet.UsedRange.Address iAdr = Mid(iAdr, InStr(iAdr, ":") + 1) For Each sh In ActiveWorkbook.Sheets For Each poisk In sh.UsedRange On Error Resume Next If poisk Like "*" & TextBox1.Value & "*" Then ListBox1.AddItem sh.Name & "!" & poisk.Address ListBox1.List(j, 1) = poisk j = j + 1 End If Next Next End Sub Private Sub ListBox1_Click() Dim sh As Worksheet, r As Range, m If ListBox1.ListIndex = -1 Then Exit Sub m = Split(ListBox1, "!") Set sh = Sheets(m(0)): Set r = sh.Range(m(1)) sh.Activate: r.Select End Sub
[/vba]
Обратите внимание на: [vba]
Код
"*" & TextBox1.Value & "*"
[/vba] "*" - это значит любые символы... т.е. при таком коде будет находить все ячейки в которых содержатся введенные символы Если убрать сначала то будет искать все слова начинающиеся на введенные символы [vba]
Код
TextBox1.Value & "*"
[/vba] Если убрать в конце то будет искать все слова заканчивающиеся на введенные символы [vba]
Код
"*" & TextBox1.Value
[/vba] Можно вводить подстановочные знаки: * ? С ними тоже будет работать, например: М*а: Машина Мода Мука...
М?р* Морковь но не Микрорайон
Вот пробуйте
[vba]
Код
Option Explicit Option Compare Text Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Dim j As Long, i As Long, poisk As Range, iAdr$, LT%, sh As Worksheet ListBox1.Clear LT = Len(TextBox1.Value) If LT = 0 Then Exit Sub j = 0 iAdr = ActiveSheet.UsedRange.Address iAdr = Mid(iAdr, InStr(iAdr, ":") + 1) For Each sh In ActiveWorkbook.Sheets For Each poisk In sh.UsedRange On Error Resume Next If poisk Like "*" & TextBox1.Value & "*" Then ListBox1.AddItem sh.Name & "!" & poisk.Address ListBox1.List(j, 1) = poisk j = j + 1 End If Next Next End Sub Private Sub ListBox1_Click() Dim sh As Worksheet, r As Range, m If ListBox1.ListIndex = -1 Then Exit Sub m = Split(ListBox1, "!") Set sh = Sheets(m(0)): Set r = sh.Range(m(1)) sh.Activate: r.Select End Sub
[/vba]
Обратите внимание на: [vba]
Код
"*" & TextBox1.Value & "*"
[/vba] "*" - это значит любые символы... т.е. при таком коде будет находить все ячейки в которых содержатся введенные символы Если убрать сначала то будет искать все слова начинающиеся на введенные символы [vba]
Код
TextBox1.Value & "*"
[/vba] Если убрать в конце то будет искать все слова заканчивающиеся на введенные символы [vba]
Код
"*" & TextBox1.Value
[/vba] Можно вводить подстановочные знаки: * ? С ними тоже будет работать, например: М*а: Машина Мода Мука...
Еще вопрос по теме, если у нас наложен фильтр, который скрывает ячейку с данными, можно с этой ячейки убрать фильтр? или как-то по другому решить это?
Еще вопрос по теме, если у нас наложен фильтр, который скрывает ячейку с данными, можно с этой ячейки убрать фильтр? или как-то по другому решить это?lFJl
SLAVICK, А как в существующей форме с листбоксом осуществить поиск? 1.Чтоб при нахождении искомого, в листбоксе автоматически выделялась строка с нужным результатом 2.При нажатии на кнопку "поиск", выполнялся поиск следующего совпадения
Познания в VBA =0,01. Пробывал в свою форму добавлять Ваш код (с исправлениями ссылок) - результата 0.
Заранее благодарен!
SLAVICK, А как в существующей форме с листбоксом осуществить поиск? 1.Чтоб при нахождении искомого, в листбоксе автоматически выделялась строка с нужным результатом 2.При нажатии на кнопку "поиск", выполнялся поиск следующего совпадения
Познания в VBA =0,01. Пробывал в свою форму добавлять Ваш код (с исправлениями ссылок) - результата 0.