Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
1
Excel

Выбор данных связанных через Combobox

22.03.2019, 12:16. Показов 1585. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня всем!
Есть несколько Combox (клиент, регион, менеджер...) в которые выводятся уникальные значения с листа2.
Как при выборе в каком либо Combobox вывести в другие Combobox связанные значения?
К примеру если выбираем Менеджер, то в другие Combobox должно вывестись регионы и клиенты которые соответствуют данному менеджеру.
Или выбираем Менеджера и регион, то должны вывестись клиенты которые соответствуют выбору.
Попытался, через ВПР. выводится куча чего то одного
С библиотеками и массивами у меня очень туго
Буду благодарен за помощь или хотя бы подсказку куда двигаться.
Заранее спасибо!
Вложения
Тип файла: xls Список клиентов.xls (59.0 Кб, 21 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2019, 12:16
Ответы с готовыми решениями:

Уникальные значения Combobox и выбор связанных ячеек
Всем доброго времени суток! Подскажите пожалуйста как можно вывести в Combobox2 ВСЕ значения из...

Выбор данных связанных Listbox
И снова всем привет! С выводом списка файлов и работой с ними разобрался. Теперь вот пытаюсь...

Выбор данных через ComboBox и отображение данных в datagridview
Всем здравствуйте. Есть проблема. Нужно осуществить выбор данных по договорам и клиентам через...

Выбор связанных значений тройного comboBox
Добрый день! Давно мучаюсь, откладывал вопрос, но до сих пор не осилил. БД MSSQL, WinForms....

7
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
22.03.2019, 14:09  [ТС] 2
В принципе почти получилось:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Private Sub ComboBox1_Change() 'Выборе менеджера
  
  Dim dicCountry 'Объявляем переменную для словаря
  Dim row As Integer
  Dim key As String, item As Double ' переменные для ключа и элемента словаря
  Set dicCountry = CreateObject("Scripting.Dictionary") ' создаём словарь
  Set dicCountry2 = CreateObject("Scripting.Dictionary") ' создаём словарь
   
  ComboBox2.Clear
  ComboBox3.Clear
  With Sheets(2).Range("A1:F" & Лист2.Range("A1").End(xlDown).row) ' работаем с именованным диапазоном
    For row = 1 To .Rows.Count ' перебираем строки ИД
     If CStr(Cells(row, 3)) = ComboBox1.Text Then
      key = CStr(.Cells(row, 5).Value) ' Получаем регион
      key2 = CStr(.Cells(row, 4).Value) ' Получаем клиента
      item = CDbl(.Cells(row, 2).Value) ' получаем элемент из второго столбца текущей строки ИД
      item2 = CDbl(.Cells(row, 2).Value) ' получаем элемент из второго столбца текущей строки ИД
      dicCountry.item(key) = item
      dicCountry2.item(key2) = item2
     End If
    Next
  End With
For Each varItem In dicCountry ' организуем цикл по элементам  масива Items
      ComboBox2.AddItem varItem
      
    Next
For Each varItem In dicCountry2 ' организуем цикл по элементам  масива Items
      ComboBox3.AddItem varItem
     Next
 
End Sub
 
Private Sub ComboBox2_Change() 'Выборе региона
  
  Dim dicCountry 'Объявляем переменную для словаря
  Dim row As Integer
  Dim key As String, item As Double ' переменные для ключа и элемента словаря
  Set dicCountry = CreateObject("Scripting.Dictionary") ' создаём словарь
  Set dicCountry2 = CreateObject("Scripting.Dictionary") ' создаём словарь
   
 
   ComboBox3.Clear
  With Sheets(2).Range("A1:F" & Лист2.Range("A1").End(xlDown).row) ' работаем с именованным диапазоном
    For row = 1 To .Rows.Count ' перебираем строки ИД
     If (CStr(Cells(row, 5)) = ComboBox2.Text And CStr(Cells(row, 3)) = ComboBox1.Text) Then
      key = CStr(.Cells(row, 3).Value) ' получаем менеджера
      key2 = CStr(.Cells(row, 4).Value) ' получаем клиента
      item = CDbl(.Cells(row, 2).Value) ' получаем элемент из второго столбца текущей строки ИД
      item2 = CDbl(.Cells(row, 2).Value) ' получаем элемент из второго столбца текущей строки ИД
      dicCountry.item(key) = item
      dicCountry2.item(key2) = item2
     End If
    Next
  End With
For Each varItem In dicCountry ' организуем цикл по элементам  масива Items
      ComboBox1.AddItem varItem
      
    Next
For Each varItem In dicCountry2 ' организуем цикл по элементам  масива Items
      ComboBox3.AddItem varItem
     Next
 
End Sub
но проблема все равно осталась. Работает только если выбирать 1)менеджера, 2)регион, 3)клиент.
Остальное проблема с очисткой и перезаписью данных в комбобоксах..
Как возможно решить?
0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
22.03.2019, 14:22 3
Цитата Сообщение от Авдей Посмотреть сообщение
Работает только если выбирать 1)менеджера, 2)регион, 3)клиент.
а как еще хотите?

п.с. вместо цикла в комбо выводить можно так
ComboBox2.List = dicCountry.Keys
0
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
22.03.2019, 14:39  [ТС] 4
Ну хочу много
Но хотя бы чтоб была возможность выбора в любом комбобоксе, и уже вывод в остальные..
Не получается из-за необходимости очищать комбобокс.
За вывод спасибо! . Первый раз у самого получилось со словарем что то сделать, справку измучал.

Добавлено через 2 минуты
Да и в текущем коде.
Если начать играться с регионами..выбрал менеджера, регион, клиента..сменил регион-в список менеджеров добавляются еще менеджеры.
0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
22.03.2019, 14:55 5
если выбор произвольный нужна будет кнопка сброса выбора.
0
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
22.03.2019, 15:37  [ТС] 6
Ну разве что только так..по другом пока не получается
0
141 / 124 / 50
Регистрация: 10.11.2011
Сообщений: 622
22.03.2019, 16:49 7
Как вариант,но есть ошибки по отбору уникальных значений. Если выбрать менеджера Табуреткин,то в комбике Регион не отображаются уникальные значения. Может кто то подкорректирует. Прикрепляю файл.
Вложения
Тип файла: xls Список клиентов.xls (66.5 Кб, 36 просмотров)
0
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
22.03.2019, 16:54  [ТС] 8
За пример как можно сделать еще спасибо! У меня все получается через словарь.
Повторюсь: проблема в том что если при выборе региона где есть несколько менеджеров, то менеджеры дозаписываются.
Если делать стирание списка менеджеров перед формированием нового.то исчезает список регионов
как то так.
0
22.03.2019, 16:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2019, 16:54
Помогаю со студенческими работами здесь

Проблема с привязкой связанных данных к ComboBox при использовании EF
Имеется модель данных. В ней 3 таблицы связаны каскадно один ко многим. В данном случае я работаю...

Выбор данных в связанных списках Улица, Дом, Квартира
Всем привет! Помогите, пожалуйста, реализовать выборку данных. На форме Выборка с полями...

Вывод значений в comboBox, связанных с другим comboBox
как сделать вывод в combobox2, если оно зависит от выбора значения comboBox1. программа...

Занесение в таблицу "связанных" данных из ComboBox
Есть вопросик: Из одной таблицы считываются данные о магазине (id и store_nm) и заносятся в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru