Всем доброго времени. Подскажите, не выходит связать 2 combobox'а так, чтобы в значения в первом не повторялись, а во втором были зависимы от того что выбрано в первом. Форма во вложении, у меня получилось только сделать динамическое заполнение из массива на листе.
Всем доброго времени. Подскажите, не выходит связать 2 combobox'а так, чтобы в значения в первом не повторялись, а во втором были зависимы от того что выбрано в первом. Форма во вложении, у меня получилось только сделать динамическое заполнение из массива на листе.argetlam
Private Sub ComboBox1_Change() ComboBox2.Clear With CreateObject("scripting.dictionary") For i = 2 To Worksheets("Список").Cells(Rows.Count, 2).End(xlUp).Row If ComboBox1.Value = Worksheets("Список").Cells(i, 1) Then If Not .Exists(Trim(Worksheets("Список").Cells(i, 2))) Then .Add Trim(Worksheets("Список").Cells(i, 2)), i ComboBox2.AddItem Worksheets("Список").Cells(i, 2).Value End If End If Next i End With End Sub Private Sub UserForm_Initialize() With CreateObject("scripting.dictionary") For i = 2 To Worksheets("Список").Cells(Rows.Count, 1).End(xlUp).Row If Not .Exists(Trim(Worksheets("Список").Cells(i, 1))) Then .Add Trim(Worksheets("Список").Cells(i, 1)), i ComboBox1.AddItem Worksheets("Список").Cells(i, 1).Value End If Next i End With End Sub
[/vba]
argetlam, так подойдет? [vba]
Код
Private Sub ComboBox1_Change() ComboBox2.Clear With CreateObject("scripting.dictionary") For i = 2 To Worksheets("Список").Cells(Rows.Count, 2).End(xlUp).Row If ComboBox1.Value = Worksheets("Список").Cells(i, 1) Then If Not .Exists(Trim(Worksheets("Список").Cells(i, 2))) Then .Add Trim(Worksheets("Список").Cells(i, 2)), i ComboBox2.AddItem Worksheets("Список").Cells(i, 2).Value End If End If Next i End With End Sub Private Sub UserForm_Initialize() With CreateObject("scripting.dictionary") For i = 2 To Worksheets("Список").Cells(Rows.Count, 1).End(xlUp).Row If Not .Exists(Trim(Worksheets("Список").Cells(i, 1))) Then .Add Trim(Worksheets("Список").Cells(i, 1)), i ComboBox1.AddItem Worksheets("Список").Cells(i, 1).Value End If Next i End With End Sub
Manyasha, то что доктор прописал Спасибо Вам огромное! А можете в 2х словах пояснить, что делают Exist и Trim? Я так понял, что код работает через заполнение библиотеки и сравнение значений внутри неё? Я уже где-то читал, что в библиотеке имена не повторяются, но так и не понял как её правильно применить.
Manyasha, то что доктор прописал Спасибо Вам огромное! А можете в 2х словах пояснить, что делают Exist и Trim? Я так понял, что код работает через заполнение библиотеки и сравнение значений внутри неё? Я уже где-то читал, что в библиотеке имена не повторяются, но так и не понял как её правильно применить.argetlam
argetlam, это словари. Exists проверяет наличие элемента в словаре. Trim - на всякий случай, убирает лишние пробелы. Подробнее можете почитать тут: Dictionary - это совсем не сложно!
argetlam, это словари. Exists проверяет наличие элемента в словаре. Trim - на всякий случай, убирает лишние пробелы. Подробнее можете почитать тут: Dictionary - это совсем не сложно! Manyasha