Solved

Sort ListBox numerically in MS Word

Posted on 2013-01-01
5
724 Views
Last Modified: 2013-01-02
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
Comment
Question by:DrTribos
5 Comments
 
LVL 59

Expert Comment

by:Chris Bottomley
ID: 38735696
Sorry

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

Chris
0
 
LVL 29

Accepted Solution

by:
IrogSinta earned 350 total points
ID: 38735698
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
 
LVL 16

Assisted Solution

by:terencino
terencino earned 50 total points
ID: 38735794
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
 
LVL 15

Author Comment

by:DrTribos
ID: 38735858
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
 
LVL 16

Expert Comment

by:terencino
ID: 38735865
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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

It is often necessary in this forum and others to illustrate Word fields as text with the field delimiters replaced with the curly brackets that the delimiters resemble when field codes are being displayed on the document. This means that the text c…
Nice table. Huge mess. Maybe this was something you created way back before you figured out tabs or a document you received from someone else. Either way, using the spacebar to separate the columns resulted in a mess. Trying to convert text to t…
In this video, we show how to convert an image-only PDF file into a PDF Searchable Image file, that is, a file with both the image (typically from scanning) and text, which is created in an automated fashion with Optical Character Recognition (OCR) …
This video walks the viewer through the process of creating Hyperlinks for the web and other documents. Select the "Insert" tab: Click "Hyperlink":  Type "http://" followed by a web address to reference a website or navigate to a document to ref…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question