Printing directory...page break at change of initial cap

V

Victoria @ WB

Sorry, but I haven't printed out a directory in years so I'm a little rusty.
I'm using Office 02 and trying to print out my Outlook contacts. However, I
want to keep the contacts grouped by initial cap of the "file As". I
couldn't find the command from using either Outlook or Word to do the merge.

Sample:
Amirmoazzami, Soheil
Dentist

Aqunio, Vincent
BLS-New York

Buffone, John
NPD
===page break===
Carlson, Stan
Coldwell Banker

Chatman, Shawna
Xerox

Clark, Lyn
Pierce College

Crawford, Erin
AC Nielsen

Customer Service,
World Travel/ BTI
===page break===
Davie, Margaret
Management Ventures

Donahue, Jamie
Canon

Dr. Gordon,
Optometrist

Thank you.
 
D

Doug Robbins - Word MVP

It can't be done out of the box, however, if you create a Catalog (on in
Word XP and later, it's called Directory) type mailmerge main document with
the mergefields in the cells of a one row table in the mailmerge main
document with the keyfield in the first cell in the row and then execute
that merge to a new document and then run the following macro, it will
create separate tables with the records for each key field in them.

' Macro to create multiple items per condition in separate tables from a
directory type mailmerge
Dim source As Document, target As Document, scat As Range, tcat As Range
Dim data As Range, stab As Table, ttab As Table
Dim i As Long, j As Long, k As Long, n As Long
Set source = ActiveDocument
Set target = Documents.Add
Set stab = source.Tables(1)
k = stab.Columns.Count
Set ttab = target.Tables.Add(Range:=Selection.Range, numrows:=1,
numcolumns:=k - 1)
Set scat = stab.Cell(1, 1).Range
scat.End = scat.End - 1
ttab.Cell(1, 1).Range = scat
j = ttab.Rows.Count
For i = 1 To stab.Rows.Count
Set tcat = ttab.Cell(j, 1).Range
tcat.End = tcat.End - 1
Set scat = stab.Cell(i, 1).Range
scat.End = scat.End - 1
If Left(scat, 1) <> Left(tcat, 1) Then
ttab.Rows.Add
j = ttab.Rows.Count
ttab.Cell(j, 1).Range = scat
ttab.Cell(j, 1).Range.Paragraphs(1).PageBreakBefore = True
ttab.Rows.Add
ttab.Cell(j + 1, 1).Range.Paragraphs(1).PageBreakBefore = False
For n = 2 To k
Set data = stab.Cell(i, n).Range
data.End = data.End - 1
ttab.Cell(ttab.Rows.Count, n - 1).Range = data
Next n
Else
ttab.Rows.Add
For n = 2 To k
Set data = stab.Cell(i, n).Range
data.End = data.End - 1
ttab.Cell(ttab.Rows.Count, n - 1).Range = data
Next n
End If
Next i

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top