Страницы: 1
RSS
Каскадный список 2 уровня макрос
 
Добрый день.

Прошу помощи в реализации задачи макросом, на формулах СМЕЩ и именах диапазонах уже реализовано (прикреплённый файл).
Но это не удобно, нужен именно макрос, который будет работать на всех листах книги (которых может быть 200 и более), кроме листа "Данные".
Не удобно потому что формула в имени диапазона постоянно слетает, а файлом будут пользоваться люди, которые в экселе, мягко говоря полный ноль.

Два дня копался в гугле, но так и не удалось найти такого простого макроса, который можно было бы адаптировать под эту задачу.
 
Sasha UFO, здравствуйте.
Отойдите от использования каскадов в сторону поиска по сцепке критериев: вместо 4х кликов "Еда —> Фрукты —> Яблоки —> Антоновка" простой поиск по строке "Еда | Фрукты | Яблоки | Антоновка" (разделитель может быть любым)… А уже такие строки можно спокойно "скормить" в любую форму, не парясь об уровнях. Вот тут недавно делал что-то похожее…
Изменено: Jack Famous - 16.08.2019 09:48:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
поиска по сцепке критериев
ВПР?
 
Цитата
Sasha UFO: ВПР?
нечто гораздо более удобное для подобных случаев  ;)

Сделал вам пример. В файле есть именованный диапазон "cascades". В любом месте файла даблклик вызовет форму с поиском по данному списку. Даблклик в форме введёт данные в активную ячейку
Изменено: Jack Famous - 16.08.2019 09:50:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: нечто гораздо более удобное для подобных случаев
Круто, но я бы не сказал, что это как раз таки мой случай.
Как прикрутить это к листу, на котором нужно заполнить характеристики? Неудобно каждый раз вводить в поле поиска то что ищем. Не удобно, вставляется сцепка, а не само значение.

Пользователь на листе должен заполнить все характеристики по каждому из аппаратов, при этом каждая характеристика (условие) содержит свой перечень допустимых значений.
Думаю, всё же классический каскад, но только в макросе - самое простое и интуитивно понятное решение.

Спасибо в любом случае.
Изменено: Sasha UFO - 16.08.2019 10:49:18
 
Sasha UFO, даже не собираюсь вас в чём-то переубеждать (всё решается одной строкой кода), только прикрепите изображение, как положено, чтобы не было, как на скрине
Изменено: Jack Famous - 16.08.2019 10:03:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
всё решается одной строкой кода
Был бы я силён в VBA, написал бы код и не просил тут помощи) Спасибо за понимание!
 
Sasha UFO, решил-таки ответить по пунктам  :D
Цитата
Sasha UFO: Как прикрутить это к листу
очевидно, "повесить" на событие листа
Цитата
Sasha UFO: Не удобно, каждый раз вводить
последняя маска запоминается, а как найти не искав - это очень сильное колдунство
Цитата
Sasha UFO: вставляется сцепка, а не само значение
в процедуре ФормаПоискаПоАктивномуСтолбцу:
Код
' замените (в самом конце)
rng.Value2 = arr1x(0)

' на
arr1x=Split(arr1x(0)," | ")
rng.Value2 = arr1x(UBound(arr1x))
Цитата
Sasha UFO: каждая характеристика (условие) содержит свой перечень допустимых значений.
так запишите их в список. Как вы ДО этого делали?
Цитата
Sasha UFO: классический каскад, но только в макросе - самое простое и интуитивно понятное решение
я не видел "каскады" НЕ в макросе (в Excel)… Многие их предпочитают, а потом начинаются вопросы "а как уровни добавить/убрать", "а как списки/проверки вести", "а как удалить все нижние уровни, если пользователь изменил верхние" — я давно их заменил на этот способ и он бьёт "каскады" по всем параметрам (скорость поиска/универсальность/удобство эксплуатации), кроме одного — консерватизм человека и его категорическое нежелание принять что-то новое  ;)
Цитата
Sasha UFO: Был бы я силён в VBA
ну тогда вы точно тут частенько будете, если это не единичный случай))
Изменено: Jack Famous - 16.08.2019 10:18:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Sasha UFO, вот вариант, узкозаточенный под ваши нужды. Работает по даблклику на листе ВВОД, если это случилось не в 1 столбце, не в 1 строке и в 1 строке активной ячейки не пусто. Верхнюю строку можно пополнять, не забывая пополнять таблицу на листе СПИСОК

UPD: внёс изменения согласно критерия
Цитата
Sasha UFO: нужен именно макрос, который будет работать на всех листах книги (которых может быть 200 и более)
— теперь макрос сработает на ЛЮБОМ листе, имя которого НЕ "список" (регистр не важен). Прочие условия срабатывания те же
Изменено: Jack Famous - 16.08.2019 11:34:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
вот что то сляпал, может подойдет
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Jack Famous написал:
теперь макрос сработает на ЛЮБОМ листе, имя которого НЕ "список" (регистр не важен). Прочие условия срабатывания те же
Отлично!

А если заполнять начинаем всегда с ячейки B13 и условия всегда хранятся в 4 строке? Не смог найти в макросе соответствующие блоки чтоб подправить.
 
Цитата
Nordheim написал:
вот что то сляпал
Т.е., сначала всегда нужно нажать кнопку "Заполнить", чтобы макрос все значения записал в список проверки данных?

А если условие содержит больше 5 тыс возможных значений?
 
Цитата
Sasha UFO написал:
А если условие содержит больше 5 тыс возможных значений?
И ну содержит и содержит , в чем проблема? В файле макросом реализовано то, что у вас формулами
т.е. могу задать встречный вопрос  
Цитата
Sasha UFO написал:
А если условие содержит больше 5 тыс возможных значений?
p.s. да сначала нужно нажат кнопку.
Изменено: Nordheim - 19.08.2019 13:00:45
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Sasha UFO: если заполнять начинаем всегда с ячейки B13
поставить проверку, и, если даблклик произошёл по ячейке, не прошедшей проверку, то ничего не делать или вывести предупреждение.

А вообще-то слишком много "а если". Была конкретная задача, предложено 2 разных, но эффективных решения. Решения полностью удовлетворяют условию, прописанному в теме, а все хотелки — через отдельные темы (со ссылками на текущую для последовательности)
Изменено: Jack Famous - 19.08.2019 13:14:00
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
А вообще-то слишком много "а если"
Укажите где в коде поменять, чтобы он считывал условия начиная с B4, а окно заполнения начиная с B13.

Цитата
Jack Famous написал:
Решения полностью удовлетворяют условию
Да, только давайте добавим универсальности и будет огонь!
 
Цитата
Jack Famous написал:
в чем проблема?
Предположил, что может быть системное ограничение в количестве данных, которые можно запихать через ";" в "Проверку данных".

Цитата
Nordheim написал:
могу задать встречный вопрос
Вопрос в том, что макрос делить значения, например, условия "Давление", воспринимая ",", как разделитель. Это не верно, разорителей не должно быть.
 
Цитата
Sasha UFO процитировал: «Jack Famous  написал: в чем проблема?»
я это не писал…
Цитата
Sasha UFO: давайте добавим универсальности
можно попробовать… На основе этой формы (нужное закомментировано)
Модуль книги (даблклик должен быть по ячейке не выше 13 строки и не левее 2 столбца)
Модуль (передаём таблицу-справочник, проверяем критерий)
P.S.: свои сообщения лучше дополнять (где это уместно), редактируя, чем плодить новые
Изменено: Jack Famous - 19.08.2019 14:08:15
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Sasha UFO написал:
Вопрос в том, что макрос делить значения, например, условия "Давление", воспринимая ",", как разделитель. Это не верно, разорителей не должно быть.
Вообще не понял эту фразу
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх