Go Premium for a chance to win a PS4. Enter to Win

x
Solved

# Combo Sort

Posted on 2000-04-18
Medium Priority
550 Views
How can I sort NUMBERS in a combobox?
I'm using .sort method, but it sort the numbers as they were strings:
1
10
100
2
20
200
Direct help would be appreciated rather then long workarounds, but I want to hear what you have to say.
0
Question by:Sylvania
• 2
• 2
• 2
• +1

LVL 70

Expert Comment

ID: 2728339
Can't you sort them before putting them in your combo?
0

LVL 70

Expert Comment

ID: 2728345
See this previous EE question: http://www1.experts-exchange.com/bin/Q.10244480
0

LVL 2

Expert Comment

ID: 2728410
If you choose not to sort them before putting them in the combo box, you may need to pad the numbers with zeros. Some thing like this would work if you don't mind the extra digits:

Function Pad(ByVal Item As String) As String

If IsNumeric(Item) Then

If InStr(Item, ".") <> 0 Then
Do Until InStr(Item, ".") = 10
Item = "0" & Item
Loop
Else
Do Until Len(Item) >= 9
Item = "0" & Item
Loop
End If

End If

End Function
0

LVL 54

Accepted Solution

nico5038 earned 240 total points
ID: 2728683

Then move with (lets say it's 10):

strItem = right("          " & strYourvalue, 10)

before you do add the item to the combobox.

Take care the font is NOT proportional otherwise you'll see something like this:
1
10
192
12234
12244

Success!

0

LVL 2

Expert Comment

ID: 2728719
Use this function to make your numbers proportional

Function Pad(ByVal Item As String) As String

If IsNumeric(Item) Then

If InStr(Item, ".") <> 0 Then
Do Until InStr(Item, ".") = 10
Item = " " & Item
Loop
Else
Do Until Len(Item) >= 9
Item = " " & Item
Loop
End If

End If

End Function
0

LVL 54

Expert Comment

ID: 2728817
Saga, proportionality isn't a property of a string and not of a number.
It has to do with a font. (The width of every single character can be different. A "m" is wide and a "i" is small)

When typing this comment the characters are NOT proportional. When viewing the result it's proportional!

Just copy and paste my sample in the input window and you can see the numbers are all right-aligned!
0

LVL 28

Expert Comment

ID: 2729133
heres a sort algorithm i wrote real quick.  Not super proficient but it gets the job done.

Option Explicit
Dim arr() As Integer

Dim i As Integer
ReDim arr(0 To Combo1.ListCount - 1)
For i = 0 To Combo1.ListCount - 1
arr(i) = Combo1.List(i)
Next
Call SortBox(arr)
End Sub

Function SortBox(tArr As Variant)
Dim i As Integer
Dim j As Integer
Dim temp As Integer
For i = 0 To UBound(arr)
For j = i + 1 To UBound(arr)
If tArr(j) < tArr(i) Then
temp = tArr(i)
tArr(i) = tArr(j)
tArr(j) = temp
End If
Next
Next
Combo1.Clear
For i = 0 To UBound(tArr)
Next
End Function
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
###### Suggested Courses
Course of the Month8 days, 14 hours left to enroll