我正在用vba Excel扩展一个小型程序。我的Comboxbox由Excel工作表填充。我想构建一些控件,例如“添加/删除项目”,以将其他项目添加到我的组合框中,这就是为什么我需要知道组合框中每个项目的行号的原因。我的代码可以执行此操作,但我仍然不知道如何在将项目添加到组合框之前按字母顺序对项目进行排序(请参见下面的代码),您能帮忙吗?预先感谢
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
答案 0 :(得分:1)
使用支持排序的数据结构来首先捕获数据,对数据进行排序,然后将其添加到列表框中。我已经展示了如何在下面的代码中添加和排序。
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
答案 1 :(得分:1)
尝试
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