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

Вход

Регистрация

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

 

= Мир MS Excel/При измененении в combobox не отражаются уникальные значения - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » При измененении в combobox не отражаются уникальные значения (Макросы/Sub)
При измененении в combobox не отражаются уникальные значения
parovoznik Дата: Воскресенье, 09.10.2016, 15:48 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 4 ±
Замечаний: 0% ±

Excel 2007
Добрый день.
При инициализации формы в комбобоксе отображаются уникальные значения.
После изменения данных в комбобоксе 1 во втором комбобоксе появляются повторяющие значения.
См. Клиент "Колорит". Как можно исправить код?
К сообщению приложен файл: 3303651.xlsm(28Kb)
 
Ответить
СообщениеДобрый день.
При инициализации формы в комбобоксе отображаются уникальные значения.
После изменения данных в комбобоксе 1 во втором комбобоксе появляются повторяющие значения.
См. Клиент "Колорит". Как можно исправить код?

Автор - parovoznik
Дата добавления - 09.10.2016 в 15:48
Udik Дата: Воскресенье, 09.10.2016, 16:15 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1202
Репутация: 152 ±
Замечаний: 0% ±

Excel 2013
Можно словарь применить
[vba]
Код

Private Sub ComboBox1_Change()
Dim i As Long, LastRow As Long, klient As String
Static oDict As Object
    Me.ComboBox2.Clear
    klient = Me.ComboBox1
    If oDict Is Nothing Then Set oDict = CreateObject("Scripting.Dictionary")
    

    With Sheets("данные")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 4 To LastRow
            If .Cells(i, 1) = klient Then
             If Not oDict.exists(.Cells(i, 2).Value) Then
                oDict.Add .Cells(i, 2).Value, .Cells(i, 2).Value
                Me.ComboBox2.AddItem .Cells(i, 2)
             End If
            End If
        Next
    End With
    oDict.RemoveAll
End Sub
[/vba]
К сообщению приложен файл: 0t.xlsm(27Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Воскресенье, 09.10.2016, 16:34
 
Ответить
СообщениеМожно словарь применить
[vba]
Код

Private Sub ComboBox1_Change()
Dim i As Long, LastRow As Long, klient As String
Static oDict As Object
    Me.ComboBox2.Clear
    klient = Me.ComboBox1
    If oDict Is Nothing Then Set oDict = CreateObject("Scripting.Dictionary")
    

    With Sheets("данные")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 4 To LastRow
            If .Cells(i, 1) = klient Then
             If Not oDict.exists(.Cells(i, 2).Value) Then
                oDict.Add .Cells(i, 2).Value, .Cells(i, 2).Value
                Me.ComboBox2.AddItem .Cells(i, 2)
             End If
            End If
        Next
    End With
    oDict.RemoveAll
End Sub
[/vba]

Автор - Udik
Дата добавления - 09.10.2016 в 16:15
parovoznik Дата: Воскресенье, 09.10.2016, 16:28 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 4 ±
Замечаний: 0% ±

Excel 2007
Udik, спасибо работает. Я со словарем никогда не работал. А можно прокоментировать код:[vba]
Код
If Not oDict.exists(.Cells(i, 2).Value) Then
oDict.Add .Cells(i, 2).Value, .Cells(i, 2).Value
Me.ComboBox2.AddItem .Cells(i, 2)
[/vba]
 
Ответить
СообщениеUdik, спасибо работает. Я со словарем никогда не работал. А можно прокоментировать код:[vba]
Код
If Not oDict.exists(.Cells(i, 2).Value) Then
oDict.Add .Cells(i, 2).Value, .Cells(i, 2).Value
Me.ComboBox2.AddItem .Cells(i, 2)
[/vba]

Автор - parovoznik
Дата добавления - 09.10.2016 в 16:28
Udik Дата: Воскресенье, 09.10.2016, 16:37 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1202
Репутация: 152 ±
Замечаний: 0% ±

Excel 2013
А можно прокоментировать код:

В условии проверяется нет ли уже такой записи в словаре. Если нет, то добавляем в словарь и в комбобокс :) .


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
А можно прокоментировать код:

В условии проверяется нет ли уже такой записи в словаре. Если нет, то добавляем в словарь и в комбобокс :) .

Автор - Udik
Дата добавления - 09.10.2016 в 16:37
parovoznik Дата: Воскресенье, 09.10.2016, 16:47 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 4 ±
Замечаний: 0% ±

Excel 2007
Спасибо . А ссылку за словари почитать можно?
 
Ответить
СообщениеСпасибо . А ссылку за словари почитать можно?

Автор - parovoznik
Дата добавления - 09.10.2016 в 16:47
Udik Дата: Воскресенье, 09.10.2016, 16:50 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1202
Репутация: 152 ±
Замечаний: 0% ±

Excel 2013
если модераторы пропустят то http://perfect-excel.ru/publ....1-0-101


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениеесли модераторы пропустят то http://perfect-excel.ru/publ....1-0-101

Автор - Udik
Дата добавления - 09.10.2016 в 16:50
parovoznik Дата: Воскресенье, 09.10.2016, 17:00 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация: 4 ±
Замечаний: 0% ±

Excel 2007
Udik, ОК hands
 
Ответить
СообщениеUdik, ОК hands

Автор - parovoznik
Дата добавления - 09.10.2016 в 17:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » При измененении в combobox не отражаются уникальные значения (Макросы/Sub)
Страница 1 из 11
Поиск:

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