Excel VBA-如何按升序对列表框中的值进行排序?
我正在寻找一种在我的userform列表框中对项目进行排序的方法。到目前为止,我的代码如下:Excel VBA-如何按升序对列表框中的值进行排序?,excel,vba,Excel,Vba,我正在寻找一种在我的userform列表框中对项目进行排序的方法。到目前为止,我的代码如下: Dim i As Long Dim j As Long Dim Temp As Variant With ListBoxName For i = 0 To .ListCount - 2 For j = i + 1 To .ListCount - 1 If .List(i) > .List(j) Then Temp =
Dim i As Long
Dim j As Long
Dim Temp As Variant
With ListBoxName
For i = 0 To .ListCount - 2
For j = i + 1 To .ListCount - 1
If .List(i) > .List(j) Then
Temp = .List(j)
.List(j) = .List(i)
.List(i) = Temp
End If
Next j
Next i
End With
这段代码有效,但遗憾的是,它没有正确地对数字进行排序。我想按以下方式对数字进行排序:
1,2,3,4,5,6,7,8,9,10,11,12,13,14
但我的代码将这些数字排序如下:
1,10,11,12,13,14,2,3,4,5,6,7,8,9
如何按升序对列表框中的项目进行数字排序?我使用
ListBoxName.AddItem
命令填充列表框。我做错了什么?试试看,请更换
If .List(i) > .List(j) Then
与
和变化:
Temp = CLng(.List(j))
这样,比较是在数字之间进行的,而不是在字符串之间
但是如果列表框中还有字符串,代码将返回一个错误 它们总是数字吗?如果是这样,
Dim Temp只要
尝试将if.List(i)>.List(j)然后
替换为if CLng(.List(i))>CLng(.List(j)),然后
和Temp=CLng(.List(j))
但如果列表框中还有字符串,代码将返回错误…感谢您的帮助。斯科特的解决方案不起作用(我不知道为什么)。FaneDuru的想法完全符合我的需要,我现在可以轻松地对列表框进行排序。它只包含数字,因此不存在由字符串引起的潜在错误问题。感谢你们两位对我的问题的帮助。仅将Temp声明为Long
没有帮助,因为比较是在将比较值分配给Temp
变量之前完成的,无论它是什么类型。。。我将在回答中转换我的评论,然后。。。
Temp = CLng(.List(j))