Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 765
  • Last Modified:

Sort ListBox numerically in MS Word

Hi All

I have a listbox that contains usually not more than 5 items.  What would be the best method for sorting these items.

I have found some code for BubbleSort but it is quite involved and I was hoping there might be something more native to MS Word VBA these days...

I also found a solution suggesting I could use: "listbox1.sorted = true"  but this does not seem to be recognised.

Items are outline numbered

3.
1.2.
1.
4.3.

etc...

Thanks
0
DrTribos
Asked:
DrTribos
2 Solutions
 
Chris BottomleyCommented:
Sorry

There is no easier way than to extract the values, sort externally  and replace!

Chris
0
 
IrogSintaCommented:
See if this works:
    ReDim strArray(Listbox1.Count - 1) As String
    Dim i As Integer

    For i = 1 To Listbox1.Count
        strArray(i - 1) = Listbox1(i)
    Next
    WordBasic.SortArray strArray()
    Listbox1.List = strArray

Open in new window

0
 
terencinoCommented:
The problem is that outline numbering doesn't sort numerically. I've added a function here to convert 2.1. to 02.01. for example to make sorting easier
Function OrderOutline(out_number As Variant)
Dim a As Variant
a = Split(out_number, ".")
For i = 0 To UBound(a) - 1
  If CInt(a(i)) < 10 Then a(i) = "0" & a(i)
  temp = temp & a(i) & "."
Next i
OrderOutline= temp
End Function

Open in new window

Combined with the listbox alpha sorting routine, I think it gets you closer to where you want to be. The attached file contains a demo listbox
...Terry
SortListBox.doc
0
 
DrTribosAuthor Commented:
Hi IrogSinta

Thank you... your example set me on my way, the following eventually worked:

''' This code sorts the list
Dim i as Integer
ReDim strArray(frm.myList.ListCount - 1) As String
For i = 0 To frm.myList.ListCount - 1
    frm.myList.ListIndex = i
Next i
    WordBasic.SortArray strArray()
    frm.myList.List = strArray

Open in new window


Terry - sorry... I did not see your suggestion until I had the above code working.  I did take a look at it and can learn from it so thank you.

Steve
0
 
terencinoCommented:
That sort will work fine unless you have some numbering like 10.1. in which case it will come after 1.1. instead of 9.1, or 1.10.1 which will come after 1.1.1 instead of 1.9.1

My solution does sort numerically as you requested
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now