showing lists in serial letters

O

Olivier

Hello,

I am having a small problem with mailmerge in word.

I have an access database that has the following tables:

name, address, invoice, date

what I would like to have a serial letter that looks like this:

<name>
<address>

Dear Mr. <name>,

Here is a list of all your invoices:
[then there should be a table with all invoices the respective customer has,
e.g.]

<invoice> dated <date>
<invoice> dated <date>


I tried for hours now but was not able to do this. Is this possible? How?

Regards,
Olivier
 
D

Doug Robbins

I would use a report in Access. It is much easier.

Word does not really have the ability to perform a "multiple items per
condition (=key field)" mailmerge.

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

Or, 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. With a bit of further development, you may be able to
get it to do what you want.

' 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


--
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
 
O

Olivier

Thanks to everyone who sent me the invormation. I combined all the
information and after some further try-and-error it worked perfectly. Here
is how it worked for me:

{ DATABASE \d "H:\\Eigene Datenquellen\\mo3 AbfrageInfoBrief.odc" \c
"Provider=MSDASQL.1;Persist Security Info=True;Extended
Properties=\"DSN=Microsoft
Access-Datenbank;DBQ=C:\\SecData\\MO3ARCHIV\\mo3\\mo3.mdb;DefaultDir=C:\\SecData\\MO3ARCHIV\\mo3;DriverId=25;FIL=MS
Access;MaxBufferSize=2048;PageTimeout=5;\";Initial
Catalog=C:\\SecData\\MO3ARCHIV\\mo3\\mo3" \s "SELECT FORMAT(`dVON`, 'DDDD,
D. MMMM YYYY') AS Einrückdatum, FORMAT(`dBIS`,'DDDD, D. MMMM YYYY') AS
Entlassungsdatum, `BEMERKUNGEN` AS Kommentar FROM `AbfrageInfoBrief` WHERE
((`GUIDAdA` = '{mergefield guidada}')) ORDER BY `dVON`" \l "3" \b "447"
\h }

Regards,
Oliver

Doug Robbins said:
I would use a report in Access. It is much easier.

Word does not really have the ability to perform a "multiple items per
condition (=key field)" mailmerge.

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

Or, 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. With a bit of further development,
you may be able to get it to do what you want.

' 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


--
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
Olivier said:
Hello,

I am having a small problem with mailmerge in word.

I have an access database that has the following tables:

name, address, invoice, date

what I would like to have a serial letter that looks like this:

<name>
<address>

Dear Mr. <name>,

Here is a list of all your invoices:
[then there should be a table with all invoices the respective customer
has, e.g.]

<invoice> dated <date>
<invoice> dated <date>


I tried for hours now but was not able to do this. Is this possible? How?

Regards,
Olivier
 

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

Top