UserForm中ListBox元素按字母顺序及长度排序异常求助
解决ListBox按长度+字母双重排序的问题
你的排序逻辑存在错误,原代码中使用Or连接两个条件,会导致只要满足「字符串字母顺序更大」或「字符串长度更长」其中一个条件就交换元素,完全不符合你需要的「先按长度升序,长度相同再按字母升序」的规则。
修正后的排序代码
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 ' 先比较长度:i的长度大于j则交换 ' 长度相等时,再按字母顺序比较:i的字母大于j则交换 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 Temp = ListBox.List(j) ListBox.List(j) = ListBox.List(i) ListBox.List(i) = Temp End If Next j Next i End Sub
逻辑说明
- 优先按长度排序:短字符串排在长字符串前面,确保10字符的元素会在9字符元素之后。
- 同长度元素按字母排序:长度相同时,按照字符串的字母升序排列,避免出现
Element_10排在Element_2前面的情况。
用该代码处理你的示例元素,最终排序结果会是:
Element_1 Element_2 Element_3 Element_10
内容的提问来源于stack exchange,提问作者Tounn
相关产品推荐
相关产品推荐

