Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
ComboBox с уникальными значениями по возрастанию (по алфавиту).
 
Всем привет!

В файле есть табличка в два столбца и кнопка вызова формы, на форме имеется ComboBox1 и ComboBox2 с кодом для сортировки уникальных значений из списка. Как дополнить данный код для отображения данных в ComboBox'ах по возрастанию (по алфавиту)?  
 
Всё сделано до нас:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=9831
 
Я рассматривал этот вариант (NoDumps), но как только я не пробовал прикрутить к своему коду, он не хочет работать, постоянно ошибки. А вот тот вариант кода для выбора уникальных значений, что в моем файле отлично работает (не помню уже где его нашел, на каком форуме, просто столько всего перекопал). У меня вопрос, возможно ли именно тот код, что в файле во вложении как то доделать? Чтобы помимо выбора уникальных значений он сортировал их по возрастанию (по алфавиту).
 
Нельзя отсортировать таблицу до выполнения макроса?
 
Да полно готовых сортировок массивов... Например:
Код
Private Sub UserForm_Initialize()

'Заполнить уникальными значениями ComboBox1 из столбца "B"
    Arr = Range(Cells(5, 2), Cells(Rows.Count, "B").End(xlUp)).Value
    With CreateObject("Scripting.Dictionary")
        For i = LBound(Arr) To UBound(Arr)
            .Item(Arr(i, 1)) = 1
        Next
        Me.ComboBox1.List = SortArray(.Keys)
    End With

    'Заполнить уникальными значениями ComboBox2 из столбца "C"
    Arr = Range(Cells(5, 3), Cells(Rows.Count, "C").End(xlUp)).Value
    With CreateObject("Scripting.Dictionary")
        For i = LBound(Arr) To UBound(Arr)
            .Item(Arr(i, 1)) = 1
        Next
        Me.ComboBox2.List = SortArray(.Keys)
    End With

End Sub

'Процедура для сортировки массива методом пузырька
Function SortArray(ByRef a As Variant)
    Dim i As Long, j As Long
    Dim t As Variant

    'standard bubble sort loops
    For i = LBound(a) To UBound(a) - 1
        For j = i + 1 To UBound(a)
            If a(i) > a(j) Then    'change to < for descending order
                t = a(i)
                a(i) = a(j)
                a(j) = t
            End If
        Next j
    Next i
    SortArray = a
End Function


 
ловите
Живи и дай жить..
 
Всем БОЛЬШОЕ СПАСИБО!!!
Страницы: 1
Читают тему (гостей: 1)