It's not straightforward doing this in Word as one you probably have is
"multiple items per condition" If you have Access, it would be better to
move the data into that and then use a report in Access which is better at
this sort of thing than Word. One other alternative is to see the "Multiple
items per condition" item under the "Special merges" section of fellow MVP
CIndy Meister's website at
http://homepage.swissonline.ch/cindymeister/MergFram.htm
Alternatively, if you use a catalog (or in Word XP and later a directory),
type mailmerge
in which in the mailmerge main document, you have the mergefields in the
individual cells of a single row table and NOTHING else in the document so
that when you execute the merge you get a document that contains a table
containing all of the data, listed in customer order, then you run the
following macro
on that document, it will create separate tables for the each customer, one
table to each page. Then with a bit more work, which also could be
performed by a macro as I think about it, you could get your invoices.
' 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 scat <> tcat 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
--
Please respond to the Newsgroup for the benefit of others who may be
interested. Questions sent directly to me will only be answered on a paid
consulting basis.
Hope this helps,
Doug Robbins - Word MVP