Solved

Sort ListBox numerically in MS Word

Posted on 2013-01-01
5
716 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 14

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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

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…
This is written from a 'VBA for MS Word' perspective, but I am sure it applies to most other MS Office components where VBA is used.  One thing that really bugs me is slow code, ESPECIALLY when it's mine!  In programming there are so many ways to…
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 shows and describes the main difference between both orientations in Microsoft Word. Viewers will understand when to use each orientation and how to get the most out of them.

747 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now