Страницы: 1
RSS
Перебор ComboBox на листе по условию, ComboBox
 
Добрый день, задался таким вопросом, возможно ли реализовать перебор ComboBox в при выборе значения в ComboBox являющимся критерием условия для следующего по очередности ComboBox (т.е. ComboBox1_Change в диапазоне ComboBox2 производятся соответствующие изменения) .

Пример:
Код
Private Sub ComboBox1_Change()

If ComboBox1.Text = "Case_1" Then

ComboBox2.ListFillRange = "Case_1"

ElseIf ComboBox1.Text = "Case_2" Then

ComboBox2.ListFillRange = "Case_2"

End If

End Sub

В ручную конечно можно перебрать ComboBox1, ComboBox2 и т.д., но проблема в том, что у меня имеется до 1000 строк на листе, и в каждой строке по 5 ComboBox наполнения списка каждых 4 ComboBox строки зависит от значения предыдущего, например:

1) Строка 1: Значение Combobox1 является условием для диапазона списка Combobox2; Значение Combobox2 является условием для диапазона списка Combobox3; Значение Combobox3 является условием для диапазона списка Combobox4; Значение Combobox4 является условием для диапазона списка Combobox5 (в данной строке наполнение списками закончено);

2) Строка 2: Значение Combobox5 является условием для диапазона списка Combobox6; Значение Combobox6 является условием для диапазона списка Combobox7; Значение Combobox7 является условием для диапазона списка Combobox8; Значение Combobox8 является условием для диапазона списка Combobox9 (в данной строке наполнение списками закончено и так далее по строка).

Вручную прописывать для изменения каждого из 4 ComboBox в строке слишком проблематично.

Возможно ли прописать какую-либо процедуру по которой:

1) Combobox1, Combobox5, Combobox10 и тд. будет всегда критерием для наполнения списка Combobox2, Combobox6, Combobox11 и тд. по названным диапазонам

Код
If ComboBox1.Text = "Case_1" Then

ComboBox2.ListFillRange = "Case_1"

ElseIf ComboBox1.Text = "Case_2" Then

ComboBox2.ListFillRange = "Case_2"

End If

2) Combobox2, Combobox6, Combobox11 и тд. будет всегда критерием для наполнения списка Combobox3, Combobox7, Combobox12 и тд. по названным диапазонам и так далее.
Код
If ComboBox2.Text = "Case_3" Then

ComboBox3.ListFillRange = "Case_3"

ElseIf ComboBox2.Text = "Case_4" Then

ComboBox3.ListFillRange = "Case_4"

End If

Без перебора наименований ComboBox вручную для каждого (ComboBox1_Change, ComboBox2_Change, ComboBox3_Change, ComboBox4_Change и так до 4000)?

Изменено: Tidus1988 - 07.08.2020 12:45:19
 
Написано много, а вот сам файл забыли.
 
Пример прикрепил, он не до конца заполнен конечно, но понять возможно.

Т.е. если в ComboBox1 выбран определенный город/ область, то в ComboBox2 должны отразиться в списке районы именно данного города/области, в ComboBox3 отразиться в списке населенный пункт именно данного города/области и выбранного в ComboBox2 района, в ComboBox4 отразиться в списке микрорайоны именно данного города/области и выбранного в ComboBox3, ComboBox 5 свободный выбор.

пример ниже в сообщении автора
 
Сделайте нормальную таблицу зависимостей а не то безобразие , что на листе LocationRE и можно будет все настроить, а так даже браться не хочется, тут что бы вытащить что к чему принадлежит, код больше будет, чем обработчик комбобоксов
"Все гениальное просто, а все простое гениально!!!"
 
Извиняюсь, пример прикрепил, ComboBox в строке 6 эталонные.
Логика списков заполнена в Private Sub ComboBox1_Change, Private Sub ComboBox2_Change.
Изменено: Tidus1988 - 08.08.2020 14:36:37
 
Tidus1988, зачем здесь цитата? На ччём хотели сделать акцент?
 
Юрий М, уведомление, что сообщение процитировали.
 
Не цитата это, а полная копия сообщения. удалите , и используйте кнопку цитирования по назначению.  Уведомление... ))
 
Цитата
Tidus1988 написал:
Логика списков заполнена в Private Sub ComboBox1_Change, Private Sub ComboBox2_Change.
Вот это не интересует, сделайте плоскую табллицу с зависимостями и все будет нормально, у вас же все разбросано по листу
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
сделайте плоскую табллицу с зависимостями
На листе "LocationRE", таблица с зависимостями для ComboBox строки 6 листа "SetofEvaluatedObjects".
 
Tidus1988, дружище, Ваша задача не для Excel! Она для базы данных, типа Access и т.п. ...
Уж слишком много улиц.
Хотя, если улиц меньше миллиона (всего), то можно и в Excel сделать.
 
Цитата
Михаил Витальевич С. написал:
Уж слишком много улиц.
По последнему примеру, улицы имеют неизменный список, около 800 наименований, данный диапазон не меняется в зависимости от выбора предыдущих списков.

Зависимыми списками являются ComboBox2, ComboBox3, ComboBox4.
Изменено: Tidus1988 - 10.08.2020 07:58:02
 
Цитата
Михаил Витальевич С. написал:
Она для базы данных, типа Access и т.п. ...
Я пытался донести это в двух письмах, тут либо будет плоская таблица  с кучей повторений, либо сделать на отдельный листах связки, брать данные с одного листа , как сейчас реализовано, это жесткий подход, ну я бы так не делал. А ну как вдруг что то добавится, то ищи в коде где это берется и как поправить, что бы не пропустить
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
ну я бы так не делал
Как я видел решение данной проблемы:

Все ComboBox идут строго поочередно, в каждых из зависимых ComboBox в процедуре изменения (Private Sub ComboBox_Change) прописать процедуру, которая заменить необходимость указания номера объекта, например ComboBox2, ComboBox3, а лишь будет прибавлять 1 либо отнимать 1 к текущему номеру изменяемого ComboBox, так как они все идут по очереди, соответственно не надо будет прописывать все номера объектов ComboBox в процедуре изменения (Private Sub ComboBox_Change) и тем самым можно маштабировать.
 
Я вам не про Combobox пишу, а про нормальную структуру таблицы? из которой в эти Combobox будут вставляться данные, сам обработчик вставки данных в Combobox, не сложен если есть грамотная структурированная база данных с зависимостями, у вас же наляпано все на одном листе, и по такой структуре писать код,я бы не взялся
"Все гениальное просто, а все простое гениально!!!"
 
У меня же есть именованные диапазоны, которые я в файле сообщения #5 уже использовал по логическому условию. Просто там вручную номера объектов прописывать надо.
Цитата
Tidus1988 написал:
процедуру, которая заменить необходимость указания номера объекта, например ComboBox2, ComboBox3, а лишь будет прибавлять 1 либо отнимать 1 к текущему номеру изменяемого ComboBox, так как они все идут по очереди,
Изменено: Tidus1988 - 10.08.2020 19:59:25
Страницы: 1
Наверх