Excel VBA-如何按升序对列表框中的值进行排序?

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 =

我正在寻找一种在我的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 = .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))