我在Excel的用户窗体中有一个组合框。最简单的方法是按字母顺序对它进行排序吗?它的值是在VBA中硬编码的,并且新的值只是添加到底部,因此它们没有任何已排序的方式。
目前正在使用用户窗体,以便我们的用户可以将数据从我们的数据库导入Excel。组合框存在是为了让他们指定要导入的客户数据。
我在Excel的用户窗体中有一个组合框。最简单的方法是按字母顺序对它进行排序吗?它的值是在VBA中硬编码的,并且新的值只是添加到底部,因此它们没有任何已排序的方式。
目前正在使用用户窗体,以便我们的用户可以将数据从我们的数据库导入Excel。组合框存在是为了让他们指定要导入的客户数据。
For X = 0 To COMBOBOX.ListCount - 1
COMBOBOX.ListIndex = X
If NEWVALUE < COMBOBOX.Value Then
COMBOBOX.AddItem (NEWVALUE), X
GoTo SKIPHERE
End If
Next X
COMBOBOX.AddItem (NEWVALUE)
SKIPHERE:
Sub fill_combobox()
Dim LastRow, a, b As Long, c As Variant
ComboBox1.Clear
LastRow = Sheets("S1").Cells(Rows.Count, 2).End(xlUp).Row
For x = 2 To LastRow
ComboBox1.AddItem Cells(x, 2).Value
Next
For a = 0 To ComboBox1.ListCount - 1
For b = a To ComboBox1.ListCount - 1
If ComboBox1.List(b) < ComboBox1.List(a) Then
c = ComboBox1.List(a)
ComboBox1.List(a) = ComboBox1.List(b)
ComboBox1.List(b) = c
End If
Next
Next
End Sub
VBA缺乏这种功能的内置排序函数。不幸的是。
一种便宜的方法,不涉及实现/使用其中一个流行的排序算法,是通过COM使用.NET Framework的ArrayList
类:
Sub test()
Dim l As Object
Set l = CreateObject("System.Collections.ArrayList")
''# these would be the items from your combobox, obviously
''# ... add them with a for loop
l.Add "d"
l.Add "c"
l.Add "b"
l.Add "a"
l.Sort
''# now clear your combobox
Dim k As Variant
For Each k In l
''# add the sorted items back to your combobox instead
Debug.Print k
Next k
End Sub
UserForm_Initialize
的一部分。当然,如果框架没有安装,这将失败。这个程序使用ADO库,我猜想大多数电脑上都会有(安装了Excel的话)。
子程序SortSomeData() Dim rstData As New ADODB.Recordset rstData.Fields.Append“名称”,adVarChar,40 rstData.Fields.Append“年龄”,adInteger rstData.Open