Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Word / Tables / January 2008

Tip: Looking for answers? Try searching our database.

Sort a MS Word table in two different ways

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Algelina - 25 Jan 2008 01:43 GMT
Hi !!

I am trying to figure out how to do some fancy sorting using macros in
MS WORD.

I have a table with exactly 10 rows with a "Team" column of A
and more rows with a "Team" column of B
and more rows with a "Team column of X

I would like to sort this table using macros so that:

Rows with Team A are sorted by grade then name
Rows with Team B are sorted only by name

I hope to take this sorted info and put it into a mail merged roster
file.

Any ideas?  Please be gentle with me, I am new to macros.

AL
Suzanne S. Barnhill - 25 Jan 2008 03:07 GMT
I've just done something rather like this, as it happens. What I would
suggest would be first sorting the table into A and B, then temporarily
splitting the table between A and B and sorting each separately as needed,
then rejoining the table.

Signature

Suzanne S. Barnhill
Microsoft MVP (Word)
Words into Type
Fairhope, Alabama USA

> Hi !!
>
[quoted text clipped - 16 lines]
>
> AL
Tony Jollans - 25 Jan 2008 07:38 GMT
You don't need to split the table to do this.After sorting on A,B,X,etc.
just select the A rows and sort again on the second column; then select the
B rows and sort those, etc.

Signature

Enjoy,
Tony

> I've just done something rather like this, as it happens. What I would
> suggest would be first sorting the table into A and B, then temporarily
[quoted text clipped - 21 lines]
>>
>> AL
Suzanne S. Barnhill - 25 Jan 2008 15:46 GMT
Ah, I'm not sure I realized you could sort part of a table that way, but it
makes sense.

Signature

Suzanne S. Barnhill
Microsoft MVP (Word)
Words into Type
Fairhope, Alabama USA

> You don't need to split the table to do this.After sorting on A,B,X,etc.
> just select the A rows and sort again on the second column; then select
[quoted text clipped - 25 lines]
>>>
>>> AL
Algelina - 25 Jan 2008 20:42 GMT
Yes, I was able to do that also.  But I would like to create a macro
that will do that.  How can I create a macro that will do that?

Thanks

On Jan 25, 2:38 am, "Tony Jollans" <My forename at my surname dot com>
wrote:
> You don't need to split the table to do this.After sorting on A,B,X,etc.
> just select the A rows and sort again on the second column; then select the
[quoted text clipped - 35 lines]
>
> >> AL
Tony Jollans - 26 Jan 2008 11:45 GMT
Here is some code that should do what you want:

Sub MultiSort()

   Dim TableHasHeadings As Boolean
   TableHasHeadings = False ' Set to True if you do have headings

   Dim RowNo1 As Long, RowNo2 As Long
   With ActiveDocument.Tables(1)
       .Range.Sort ExcludeHeader:=TableHasHeadings, _
                   Fieldnumber:="Column 1"
       RowNo1 = 1 - TableHasHeadings
       Do While RowNo1 <= .Rows.Count
           RowNo2 = RowNo1 + 1
           Do While RowNo2 <= .Rows.Count
               If .Cell(RowNo1, 1).Range _
               <> .Cell(RowNo2, 1).Range Then Exit Do
               RowNo2 = RowNo2 + 1
           Loop
           RowNo2 = RowNo2 - 1
           If RowNo2 > RowNo1 Then
               Select Case ActiveDocument.Range( _
                           .Cell(RowNo1, 1).Range.Start, _
                           .Cell(RowNo1, 1).Range.End - 1)
                   Case "A"
                       ActiveDocument.Range(.Rows(RowNo1).Range.Start, _
                                            .Rows(RowNo2).Range.End) _
                               .Sort Fieldnumber:="Column 2", _
                                     Fieldnumber2:="Column 3"
                   Case "B"
                       ActiveDocument.Range(.Rows(RowNo1).Range.Start, _
                                            .Rows(RowNo2).Range.End) _
                               .Sort Fieldnumber:="Column 3"
               End Select
           End If
           RowNo1 = RowNo2 + 1
       Loop
   End With

End Sub

If you don't know what to do with this see
http://www.gmayor.com/installing_macro.htm

You may have to change it slightly, depending on:

(a) whether you have column headings in your table - see the line near the
beginning with the comment

(b) I have assumed "Team" is in column 1 of your table - if not you will
have to change "Column !" in the first Sort to "Column whatever". Yopu will
also have to change all the references ".Cell(RowNo,1)" to ".Cell(RowNo,n)"
where n is the actual column number (and RowNo may be either RowNo1 or
RowNo2)

(c) I have also assumed that "Grade" is in column 2 and "Name" is in column
3. If not, you will have to change the column numbers in the two Sorts at
the end

(d) If you want to do something different with team "X" (or any other) you
will have to add an extra "Case"  and another Sort, as per the existing two.

If you need any more help, do come back.

Signature

Enjoy,
Tony

> Yes, I was able to do that also.  But I would like to create a macro
> that will do that.  How can I create a macro that will do that?
[quoted text clipped - 44 lines]
>>
>> >> AL
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.