Код |
---|
Option Explicit Public WithEvents vTBx As MSForms.TextBox Private Sub vTBx_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Cancel = True Dim x, y(), i&, j&, Idx&, tVal$, k& Idx = Val(Right(vTBx.Name, 1)) - 1 tVal = vTBx.Value With UserForm1.ListBox1 x = .List ReDim y(UBound(x, 1), UBound(x, 2)) For i = 0 To UBound(x) If InStr(x(i, Idx), tVal) Then 'Debug указывает на этот цикл For j = 0 To UBound(x, 2) y(k, j) = x(i, j) Next j k = k + 1 End If Next i .List = y() End With End Sub |
Фильтр работает до 10 текстбокса, на последующих вываливает ошибку Subscript out of range., Есть форма, но с багами. Помогите поправить
20.03.2019 18:11:42
Очень прикольный макрос. Спасибо. Не знал что так можно.
Еле понял, что нужно (ошибка у меня не вылетает). Насколько я понимаю, у Вас не работают фильтры для последние 5 столбцов. Проблема в том, что там нумерация текстбоксов становится двухзначной, а в Idx записывается только последний знак и соответственно, если если нажать на столбец 10, то в фильтр для сравнения записывается значение из столбца 10, а проверяются уже с значения не 10, а первого столбца.
Я не волшебник, я только учусь.
|
|
|
|
20.03.2019 18:40:48
Ошибку понял. А вот как избежать? Хотя бы в каком направлении думать. Присвоить другие имена текстбоксам и сделать второй цикл для сравнения?
|
|
|
|
20.03.2019 19:11:23
файл не смотрела - как написано в
Изменено:
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
|
|
|
|
20.03.2019 21:01:31
взял хитростью. Текстбоксы у меня были Tbx1 etc, переименовал их на Tbx11 etc. Беру 2 крайние цифры, отнимаю от них 11 и получаю "порядковый номер". Код прилагаю, может кому будет полезным. Спасибо за помощь)
Изменено: |
|||
|
|
20.03.2019 22:10:14
Тогда не проще и называть их Tbx01, Tbx02 и т.д.?
|
|
|
|
20.03.2019 22:14:47
Изначально так и думал сделать, 01 и т.д. Но была ошибка runtime error, а с таким вариантом ошибок небыло
|
|
|
|
20.03.2019 22:35:53
Есть атрибут Tag, который можно использовать проставив уже цифры тогда без привязки к именам просто
Idx = vTBx.Tag - 1
По вопросам из тем форума, личку не читаю.
|
|
|
|
21.03.2019 07:05:35
у меня при замене 7-й строки кода из #1 'Idx = Val(Right(vTBx.Name, 1)) - 1 на это Idx = --(Replace(vTBx.Name, "TBx", "")) - 1 вроде работает p.s. кстати при сбрасывании в лист Результат - у вас там вроде очистка сего листа изначально не предусмотрена (код не смотрю) - но пишет поверху (и если предыдущий массив больше текущего, то нижние строки из предыдущего остаются) -- перетрясите код на этот нюанс
Изменено:
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
|
|||
|
|
21.03.2019 09:15:24
М.б. вместо
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
|
|||||
|
|
21.03.2019 09:38:17
Михаил Лебедев, А это точно работает, попробовал воспроизвести, что то не хочет. Говорит:
На TextBox(ах), то же самое.
Изменено:
"Все гениальное просто, а все простое гениально!!!"
|
|
|
|
22.03.2019 05:43:02
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
|
|||
|
|
22.03.2019 08:45:43
"Все гениальное просто, а все простое гениально!!!"
|
|||
|
|
22.03.2019 09:07:40
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
|
|||
|
|
22.03.2019 09:41:02
Но и сообщения нет, а должно быть, как раз с номером индекса.
"Все гениальное просто, а все простое гениально!!!"
|
|
|
|
22.03.2019 09:47:06
Упс... В Вашем файле - да, Index не работает.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
|
|
|
|
22.03.2019 09:55:59
Не только в файле, а вообще на АРМе. Дома попробую на Excel 365
Изменено:
"Все гениальное просто, а все простое гениально!!!"
|
|
|
|
22.03.2019 10:02:48
Да, вааащщщщеееее.!!!!
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
|
|
|
|
22.03.2019 11:23:41
А разве у MSForms.CommandButton (# 11) есть свойство Index?
Владимир
|
|
|
|
22.03.2019 19:01:49
"Все гениальное просто, а все простое гениально!!!"
|
|||
|
|
22.03.2019 19:28:01
Может быть, имелось в виду TabIndex?
Владимир
|
|
|
|
22.03.2019 20:16:07
Владимир, приветствую.
Чем всех Tag то не устраивает?
По вопросам из тем форума, личку не читаю.
|
|||
|
|
23.03.2019 11:20:50
Здравствуйте, Михаил! Лично я постоянно использую свойство Tag как формы, так и ее элементов.
Владимир
|
|
|
|
23.03.2019 11:52:08
Tag штука хорошая, но, в данном конкретном случае, удобнее привязываться к имени.
Я бы написал так, и не парился.
|
|||
|
|
23.03.2019 13:14:58
RAN, Андрей, так как и в том и другом случае требуется расстановка в правильной последовательности, то трудозатраты одинаковы, а вот обработка дальнейшая проще. Но настаивать не буду, кому как удобнее.
По вопросам из тем форума, личку не читаю.
|
||||
|
|
|||