Страницы: 1
RSS
Выборка поиском по соседнему полю vba, Прошу подсказать способ организации поиска с выборкой на UserForm
 
Прошу подсказать способ организации выборки поиском на соседнем поле и отображения найденных позиций на listbox в userform.
Сейчас уперся в соотнесение найденных ячеек с ячейками в списке. Через Userform задается маска по области поиска, после происходит поиск метки (х) в выбранной колонке, меток может быть множество. В listbox'е нужно увидеть 2-ю и 3-ю колонки перед найденными ячейками.
По всей видимости, код не оптимальный или даже метод выбрал неверный.
 
Для начала посоветую избавится ит CheckBoxов и Textboxов, и заменить эти поля на один Listbox, поверьте у вас не будет такого огромного кода как сейчас.
"Все гениальное просто, а все простое гениально!!!"
 
Согласен, громоздко получилось, но это лишь copy/past одного блока.
А как еще можно задать варианты масок?
Вот тут идет поиск ячеек, содержащих метку (х) - эта часть работает, находит и выделяет все ячейки.
Код
Sub poisk()
Range("cq2:cr119") = ""

Dim i As Long
Dim znach As Variant
Dim diapaz1 As Range
Dim diapaz2 As Range

Dim marr()
Dim iAreaCount As Integer
Dim n As Integer

znach = "х"
Set diapaz1 = Application.Intersect(Selection, ActiveSheet.UsedRange)
   For i = 1 To diapaz1.Count
     If diapaz1(i) = znach Then
       If diapaz2 Is Nothing Then
         Set diapaz2 = diapaz1(i)
         Else
         Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
       End If
     End If
   Next
If diapaz2 Is Nothing Then
Else
  diapaz2.Select
End If
А вот тут нужно взять ячейки в колонках 2 и 3 в строках с найденными ячейками и скопировать в поле, которое отобразиться на listbox'е. С этим проблема. Сейчас он вставляет только найденные (х).
Код
Selection.Copy
Range("cq2").Select
ActiveSheet.Paste

End Sub
 
Вот оптимизированный немного код. Время будет посмотрю, что там по теме  :D.
Прежде чем, что то делать нужно было в коде разобраться, а там ТАКОЕ ууууу  8-0
Изменено: Nordheim - 18.07.2019 11:38:41
"Все гениальное просто, а все простое гениально!!!"
 
Не тот файл прикрепил  :(
Изменено: Nordheim - 18.07.2019 11:38:24
"Все гениальное просто, а все простое гениально!!!"
 
Простите, разве это ответ на мой вопрос?
Код
Sub start_ontime()
    Dim i&, sht As Worksheet
    Application.OnTime Now + TimeSerial(0, 0, 5), "start_ontime"
    Set sht = Лист1
    With sht
        i = .Range("a" & .Rows.Count).End(xlUp).Row + 1
        .Cells(i, 1).Value = 1
    End With
End Sub
 
Поменял файлы на актуальные.
"Все гениальное просто, а все простое гениально!!!"
 
Элегантно. Благодарю за потраченное время.
Но. В форме должен быть множественный выбор профессий, т.н. multiscilling, т.е. checbox'ы, а разряд может быть один.
 
Цитата
User_rider написал:
В форме должен быть множественный выбор профессий
Пожалуйста в файле. Но ваша логика обработки, делает этот выбор бессмысленным.
Изменено: Nordheim - 18.07.2019 12:55:22
"Все гениальное просто, а все простое гениально!!!"
 
В найденном отображается только последняя выбранная профессия, нужно по всем отмеченным. Можно это как-то исправить, а то, думаю, на изучение вашего кода уйдут годы?
 
Я ничего нового не делал, только подправил ваш код, при сборе данных по всем выделенным, нужна другая логика работы программы. На это у меня времени просо нет.
Реализовал, в рамках задачи в теме. И выбор делал по одной профессии, потому что логика работы программы такова, что данные сохраняются только по последней выделенной.
"Все гениальное просто, а все простое гениально!!!"
 
Огромное спасибо, Nordheim, за помощь, допиливать дальше сам буду.
 
Реализация обработки нескольких выбранных позиций
"Все гениальное просто, а все простое гениально!!!"
 
Спасибо огромное!!! Это очень близко к тому, что задумывалось. Буду учиться дальше.
Вопрос про отображение - я планировал "инструмент" и "подробно" разместить в двух разных столбцах, чтоб не перемешивались.
У вас сейчас обе колонки попадают в один столбец, появились OptionBox'ы и знак концевой сноски. Как их убрать? Читаю инет - пока не понятно, откуда и как убрать.
Изменено: User_rider - 19.07.2019 08:16:21
 
С непечатаемым символом разобрался.
Код
arr1(j, 2) = arr2(i, 1) & Chr(10) & vbTab & arr2(i, 2)
заменил на
Код
arr1(j, 2) = arr2(i, 1) & "    " & arr2(i, 2)
 
Добавьте доп массив с верхним индексом 3, и перемещайте в него данные а затем выгружайте на лист весь массив и будут ам заполнены 3 столбца.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
User_rider написал:
Читаю инет - пока не понятно
читайте еще личные сообщения, может так что-то проясниться
Изменено: Ігор Гончаренко - 19.07.2019 13:47:30
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, прочитал, спасибо. Принял к сведению.
не нашел кнопки "купить совет". Сделать все за себя не прошу и не просил, а за совет или подсказку буду благодарен.
Осваивать VBA начал месяц назад, для решения рабочих задач, со сложными методами не знаком, делаю как умею.
Nordheim'у огромная благодарность за участие. А Ваших советов, простите, не увидел.
Страницы: 1
Наверх