Всем доброй ночи! Прошу помочь с сортировкой данных в ListBox по второму столбцу ListBox: ListBox заполняется данными из двух столбцов без сортировки (первый столбец - уникальный код, второй столбец - ФИО) и после его заполнения необходимо отсортировать список в соответствии со вторым столбцом (ФИО) по возрастанию, при этом, уникальный код первого столбца после сортировки должен тоже отсортироваться и соответствовать этому человеку. Вторая проблема с которой я столкнулся, это отбор значений из ListBox в соответствии с введенными буквами в TextBox. Спасибо.
Всем доброй ночи! Прошу помочь с сортировкой данных в ListBox по второму столбцу ListBox: ListBox заполняется данными из двух столбцов без сортировки (первый столбец - уникальный код, второй столбец - ФИО) и после его заполнения необходимо отсортировать список в соответствии со вторым столбцом (ФИО) по возрастанию, при этом, уникальный код первого столбца после сортировки должен тоже отсортироваться и соответствовать этому человеку. Вторая проблема с которой я столкнулся, это отбор значений из ListBox в соответствии с введенными буквами в TextBox. Спасибо.vigl
можно использовать функцию сортировки массива, например тут я про нее писал [vba]
Код
Private Function aQSort2(ByRef a() As Variant, ByVal n As Integer, ByRef low As Long, ByRef high As Long) 'aQSort2 vData, 5, LBound(vData), UBound(vData) Dim i As Long, j As Long, k As Long Dim m As Variant, wsp As Variant i = low j = high m = a(Round((i + j) \ 2), n) Do Until i > j Do While a(i, n) < m i = i + 1 Loop Do While a(j, n) > m j = j - 1 Loop If (i <= j) Then For k = LBound(a, 2) To UBound(a, 2) wsp = a(i, k) a(i, k) = a(j, k) a(j, k) = wsp Next k i = i + 1 j = j - 1 End If Loop If (low < j) Then aQSort2 a(), n, low, j If (i < high) Then aQSort2 a(), n, i, high End Function
[/vba]
можно использовать функцию сортировки массива, например тут я про нее писал [vba]
Код
Private Function aQSort2(ByRef a() As Variant, ByVal n As Integer, ByRef low As Long, ByRef high As Long) 'aQSort2 vData, 5, LBound(vData), UBound(vData) Dim i As Long, j As Long, k As Long Dim m As Variant, wsp As Variant i = low j = high m = a(Round((i + j) \ 2), n) Do Until i > j Do While a(i, n) < m i = i + 1 Loop Do While a(j, n) > m j = j - 1 Loop If (i <= j) Then For k = LBound(a, 2) To UBound(a, 2) wsp = a(i, k) a(i, k) = a(j, k) a(j, k) = wsp Next k i = i + 1 j = j - 1 End If Loop If (low < j) Then aQSort2 a(), n, low, j If (i < high) Then aQSort2 a(), n, i, high End Function