VBA:按大小对列表框元素排序

问题描述 投票:0回答:1

这是上下文。我的

UserForm
中有一个系统,有 2 个
ListBoxes
。左边一个,右边一个。我已经完成了该功能,以便我可以在 2
ListBoxes
之间来回传递任何元素。 然后我想对
elements (strings)
中的
alphabetical order AND by size
进行排序。我所说的
size
是指 10 个字符的字符串将显示在 9 个字符的字符串之后。

这是我尝试过的:

Public Sub Sort_Listboxes(ByVal ListBox As msforms.ListBox)
Dim i As Long
Dim j As Long
Dim Temp As Variant

For i = 0 To ListBox.ListCount - 2
    For j = i + 1 To ListBox.ListCount - 1
        If ListBox.List(i) > ListBox.List(j) Or Len(ListBox.List(i)) > Len(ListBox.List(j)) Then
            Temp = ListBox.List(j)
            ListBox.List(j) = ListBox.List(i)
            ListBox.List(i) = Temp
        End If
    Next j
Next i

End Sub

通过这个函数我得到这个结果:

Element_1
Element_10
Element_2
Element_3

如果我们只采用条件的第一部分,这似乎很正常,但对于第二部分,它应该可以工作......

注意:我在两个函数中为两个列表调用

Sort_ListBoxes
函数
click_right
click_left

excel vba sorting listbox
1个回答
0
投票

如果您所追求的正确顺序是

Element_1
Element_2
Element_3
Element_10

然后尝试将

If
行替换为

If Len(ListBox.List(i)) > Len(ListBox.List(j)) Or (Len(ListBox.List(i)) = Len(ListBox.List(j)) And ListBox.List(i) > ListBox.List(j)) Then

...只是稍微修改逻辑以正确处理相同长度的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.