Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Связанные combobox в форме VBA - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Связанные combobox в форме VBA (Макросы/Sub)
Связанные combobox в форме VBA
argetlam Дата: Вторник, 28.06.2016, 10:53 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 46
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Всем доброго времени.
Подскажите, не выходит связать 2 combobox'а так, чтобы в значения в первом не повторялись, а во втором были зависимы от того что выбрано в первом. Форма во вложении, у меня получилось только сделать динамическое заполнение из массива на листе.
К сообщению приложен файл: 9356976.xls(42Kb)
 
Ответить
СообщениеВсем доброго времени.
Подскажите, не выходит связать 2 combobox'а так, чтобы в значения в первом не повторялись, а во втором были зависимы от того что выбрано в первом. Форма во вложении, у меня получилось только сделать динамическое заполнение из массива на листе.

Автор - argetlam
Дата добавления - 28.06.2016 в 10:53
Manyasha Дата: Вторник, 28.06.2016, 11:23 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 1587
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
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
[/vba]
К сообщению приложен файл: 9356976-1.xls(46Kb)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение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
[/vba]

Автор - Manyasha
Дата добавления - 28.06.2016 в 11:23
argetlam Дата: Вторник, 28.06.2016, 11:33 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 46
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, то что доктор прописал ^_^
Спасибо Вам огромное! А можете в 2х словах пояснить, что делают Exist и Trim?
Я так понял, что код работает через заполнение библиотеки и сравнение значений внутри неё? Я уже где-то читал, что в библиотеке имена не повторяются, но так и не понял как её правильно применить.
 
Ответить
СообщениеManyasha, то что доктор прописал ^_^
Спасибо Вам огромное! А можете в 2х словах пояснить, что делают Exist и Trim?
Я так понял, что код работает через заполнение библиотеки и сравнение значений внутри неё? Я уже где-то читал, что в библиотеке имена не повторяются, но так и не понял как её правильно применить.

Автор - argetlam
Дата добавления - 28.06.2016 в 11:33
Manyasha Дата: Вторник, 28.06.2016, 11:44 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 1587
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
argetlam, это словари. Exists проверяет наличие элемента в словаре. Trim - на всякий случай, убирает лишние пробелы.
Подробнее можете почитать тут: Dictionary - это совсем не сложно!


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеargetlam, это словари. Exists проверяет наличие элемента в словаре. Trim - на всякий случай, убирает лишние пробелы.
Подробнее можете почитать тут: Dictionary - это совсем не сложно!

Автор - Manyasha
Дата добавления - 28.06.2016 в 11:44
argetlam Дата: Вторник, 28.06.2016, 11:49 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 46
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, ещё раз огромное, человеческое спасибо!)
 
Ответить
СообщениеManyasha, ещё раз огромное, человеческое спасибо!)

Автор - argetlam
Дата добавления - 28.06.2016 в 11:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Связанные combobox в форме VBA (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!