Сортировка Combobox по алфавиту vba excel - PullRequest
0 голосов
/ 02 января 2019

Я создаю небольшую программу с помощью Excel. Мой Comboxbox заполнен из листа Excel. Я хочу создать некоторые элементы управления, такие как «добавить / удалить элементы», чтобы добавить другие элементы в мой Combobox, поэтому мне нужно знать номер строки для каждого элемента в моем Combobox. мой код способен на это, но я до сих пор не знаю, как сортировать элементы по алфавиту, прежде чем добавлять их в выпадающий список (см. мой код ниже), не могли бы вы помочь? заранее спасибо

</p>

<code>Sub Fill_EightD_D1_CB1()

With EightD.EightD_D1_CB1
    .ColumnCount = 2        ' 2 colonnes
    .ColumnWidths = "-1;0"  ' dont une de masquée

End With

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("D1")
Dim LC As Long
Dim i As Long

LC = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

For i = 2 To LC

    If ws.Cells(i, 1) <> "" Then
    EightD.EightD_D1_CB1.AddItem ws.Cells(i, 1).Value
    EightD.EightD_D1_CB1.List(EightD.EightD_D1_CB1.ListCount - 1, 1) = Mid(ws.Cells(i, 1).Address(False, False), 2, 1) 

    End If
Next i

'show always the first element
EightD.EightD_D1_CB1.ListIndex = 0

'Bold Text EightD_D1_CB1
EightD.EightD_D1_CB1.Font.Bold = True

End Sub
</code>

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Попробуйте

Sub Fill_EightD_D1_CB1()

    With EightD.EightD_D1_CB1
        .ColumnCount = 2        ' 2 colonnes
        .ColumnWidths = "-1;0"  ' dont une de masquee

    End With
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("D1")
    Dim LC As Long
    Dim i As Long, r As Long, j As Long
    Dim vDB As Variant, vR(), vtemp(1 To 2)

    LC = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    vDB = ws.Range("a2", "a" & LC)
    r = UBound(vDB, 1)
    ReDim vR(1 To r, 1 To 2)
    For i = 1 To r
        vR(i, 1) = vDB(i, 1)
        vR(i, 2) = i + 1
    Next i
    For i = 1 To r
        For j = 1 To r
            If vR(i, 1) < vR(j, 1) Then
                vtemp(1) = vR(i, 1)
                vtemp(2) = vR(i, 2)
                vR(i, 1) = vR(j, 1)
                vR(i, 2) = vR(j, 2)
                vR(j, 1) = vtemp(1)
                vR(j, 2) = vtemp(2)
            End If
        Next j
    Next i
    EightD.EightD_D1_CB1.List = vR
    'show always the first element
    EightD.EightD_D1_CB1.ListIndex = 0
    'Bold Text EightD_D1_CB1
    EightD.EightD_D1_CB1.Font.Bold = True
End Sub
0 голосов
/ 02 января 2019

Используйте структуру данных, которая поддерживает сортировку, чтобы сначала захватить данные, отсортировать их, а затем добавить в список.Я показал, как добавить и отсортировать код ниже.

Sub SortAnArrayList()
    Dim ArrayList As Object
    Dim ArrayItem As Variant

    Set ArrayList = CreateObject("System.Collections.ArrayList")

    With ArrayList
        .Add "b"
        .Add "c"
        .Add "a"
        .Sort
    End With

    For Each ArrayItem In ArrayList
        Debug.Print ArrayItem
    Next

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...