A Microsoft Office (Excel, Word) forum. OfficeFrustration

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » OfficeFrustration forum » Microsoft Word » Mailmerge
Site Map Home Register Authors List Search Today's Posts Mark Forums Read  

Loops



 
 
Thread Tools Display Modes
  #1  
Old November 10th, 2004, 11:40 AM
Monika Krug
external usenet poster
 
Posts: n/a
Default Loops

Is it possible to have some kind of loop or recursion with
mail merge fields?

Somewhat like this:

{ SET total { MERGEFIELD number }}
{ SET index 1 }
{ WHILE { index } { total }
{ MERGEFIELD "Name{index}" }
{ SET index { = index + 1 } }
}

Or any kind of workaround that achieves the same?

Monika.
  #2  
Old November 10th, 2004, 05:27 PM
Paul Lautman
external usenet poster
 
Posts: n/a
Default

"Monika Krug" wrote in message
...
Is it possible to have some kind of loop or recursion with
mail merge fields?

Somewhat like this:

{ SET total { MERGEFIELD number }}
{ SET index 1 }
{ WHILE { index } { total }
{ MERGEFIELD "Name{index}" }
{ SET index { = index + 1 } }
}

Or any kind of workaround that achieves the same?

Monika.


In trying to assist in this I have to ask why you wish to do this. There may
be another way to accomplish what you wish.


  #3  
Old November 10th, 2004, 08:33 PM
Cindy M -WordMVP-
external usenet poster
 
Posts: n/a
Default

Hi Monika,

There's a discussion about one-to-many types of mail merge on
my website (multiple items / record). I'm not sure if this is
what you want, but there is a link to a KB article that
describes how to set up such a loop.

Is it possible to have some kind of loop or recursion with
mail merge fields?

Somewhat like this:

{ SET total { MERGEFIELD number }}
{ SET index 1 }
{ WHILE { index } { total }
{ MERGEFIELD "Name{index}" }
{ SET index { = index + 1 } }
}

Or any kind of workaround that achieves the same?


Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any follow
question or reply in the newsgroup and not by e-mail :-)

  #4  
Old November 11th, 2004, 09:40 AM
Monika Krug
external usenet poster
 
Posts: n/a
Default

Cindy Meister writes:

There's a discussion about one-to-many types of mail

merge on
my website (multiple items / record). I'm not sure if

this is
what you want, but there is a link to a KB article
[http://support.microsoft.com/?kbid=105888] that
describes how to set up such a loop.


I have read those, and your website as well as the KB
article were very helpful in getting to the point where I
am at now.

The problem is with: "with a copy of the conditional
statements equal to the maximum number of projects for
each employee". I have an estimate of typically 1 to 4
records, so I have inserted the statements five times ...
but maybe there could be more, so I wondered if there is a
way (without macros) to duplicate them a certain number of
times that is read from the data source. Also, the copying
is verbose and error-prone when making changes. But I
guess there is no other solution.

I have now inserted a conditional statement that prints
out a warning that all the following data will be
corrupted when there are too many records.

Monika.
  #5  
Old November 11th, 2004, 01:21 PM
Cindy M -WordMVP-
external usenet poster
 
Posts: n/a
Default

Hi Monika,

Either I'm not understanding you, or you haven't quite
grasped the everything in the KB article. The article does
show you how to set up a looping sequence. But you have to
have the data set up the right way:

EmployeeID, ProjectDetail
EmployeeED, ProjectDetail

Sorted by EmployeeID. When you do this, the mail merge will
process each record in turn. The SET field notes the current
Employee ID. Within the IF field you have both the text for
the repeating data (project), as well as the text that
preceeds and follows the repeated listing. As long as the
EmployeeID doesn't change, the list is repeated. When it
changes, the other text is inserted (including the first item
in the list).

The problem is with: "with a copy of the conditional
statements equal to the maximum number of projects for
each employee". I have an estimate of typically 1 to 4
records, so I have inserted the statements five times ...
but maybe there could be more, so I wondered if there is a
way (without macros) to duplicate them a certain number of
times that is read from the data source. Also, the copying
is verbose and error-prone when making changes. But I
guess there is no other solution.


Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any follow
question or reply in the newsgroup and not by e-mail :-)

  #6  
Old November 11th, 2004, 02:32 PM
Monika Krug
external usenet poster
 
Posts: n/a
Default

Cindy Meister wrote:

Hi Monika,

Either I'm not understanding you, or you haven't quite
grasped the everything in the KB article. The article

does
show you how to set up a looping sequence. But you have

to
have the data set up the right way:

EmployeeID, ProjectDetail
EmployeeED, ProjectDetail

Sorted by EmployeeID. When you do this, the mail merge

will
process each record in turn. The SET field notes the

current
Employee ID. Within the IF field you have both the text

for
the repeating data (project), as well as the text that
preceeds and follows the repeated listing. As long as the
EmployeeID doesn't change, the list is repeated. When it
changes, the other text is inserted (including the first

item
in the list).


I understand that, and that is also what I have done. As I
said in my last post: The problem I tried to solve was
that the maximum number of projects per employee needs to
be known beforehand and the statements need to be copied
that often.

Monika.

---

The problem is with: "with a copy of the conditional
statements equal to the maximum number of projects for
each employee". I have an estimate of typically 1 to 4
records, so I have inserted the statements five

times ...
but maybe there could be more, so I wondered if there

is a
way (without macros) to duplicate them a certain number

of
times that is read from the data source. Also, the

copying
is verbose and error-prone when making changes. But I
guess there is no other solution.


Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update

Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any

follow
question or reply in the newsgroup and not by e-mail :-)

.

  #7  
Old November 12th, 2004, 11:28 AM
Cindy M -WordMVP-
external usenet poster
 
Posts: n/a
Default

Hi Monika,

As I
said in my last post: The problem I tried to solve was
that the maximum number of projects per employee needs to
be known beforehand and the statements need to be copied
that often.

Yes, that's where we're not communicating. If the data is
set up so that it simply lists the projects, as far as mail
merge is concerned, it doesn't matter how many there are. It
simply loops for as many projects as an employee has; you
don't make the copies, mail merge does.

So, assuming we are both understanding that point correctly,
the only way I can interpret your problem is that you need
to limit the number of projects in the data source, itself?

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any
follow question or reply in the newsgroup and not by e-mail
:-)

  #8  
Old November 15th, 2004, 11:10 AM
Monika Krug
external usenet poster
 
Posts: n/a
Default

Cindy wrote:

If the data is
set up so that it simply lists the projects, as far as

mail
merge is concerned, it doesn't matter how many there are.

It
simply loops for as many projects as an employee has; you
don't make the copies, mail merge does.


You are wrong on that. Read http://support.microsoft.com/?
kbid=105888 very closely and/or try it yourself. It does
not loop for as many projects as an employee has. The
person, not mail merge, has to make as many copies of the
conditional statement as is the maximum number of projects
per employee.

Regards,
Monika.
  #9  
Old November 16th, 2004, 01:21 AM
Doug Robbins
external usenet poster
 
Posts: n/a
Default

The only other way is to use a macro.

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


--
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
"Monika Krug" wrote in message
...
Cindy wrote:

If the data is
set up so that it simply lists the projects, as far as

mail
merge is concerned, it doesn't matter how many there are.

It
simply loops for as many projects as an employee has; you
don't make the copies, mail merge does.


You are wrong on that. Read http://support.microsoft.com/?
kbid=105888 very closely and/or try it yourself. It does
not loop for as many projects as an employee has. The
person, not mail merge, has to make as many copies of the
conditional statement as is the maximum number of projects
per employee.

Regards,
Monika.



  #10  
Old November 16th, 2004, 05:15 PM
Cindy M -WordMVP-
external usenet poster
 
Posts: n/a
Default

Hi Monika,

Been a long time since I read the article... I see what
you're talking about, BUT you should be able to set it up the
way I described. I've done it before, and so have others
(which is why it's been so long since I've read the article.

1. You don't need an extra column for "checked". You can test
the equivalent of "Employee".

2. You don't need NextIf, either.

Take a look at the following set of fields plus text. The ¶
is a paragraph mark (where you press ENTER). We start by
checking whether this is the first record, and if it is,
display the introductory text. Then we set the primary test
for the value on which the records are sorted. We do the
comparison, insert the text, then set the second test. As
each merge record cycles, the new value is checked against
the old value. Notice, too, which the static text is present
in both "true" and "false" conditions.

{ If { MERGEREC } = 1 "Employee: { MERGEFIELD "EmployeeID" }¶
" }{ Set test { MERGEFIELD "EmployeeID" } }¶
{ IF { Ref test } = { Ref testchange } "Item: { MERGEFIELD
"ProductName" }" "¶Closing text ---Page Break---
Employee: { MERGEFIELD "EmployeeID" }¶

Item: { MERGEFIELD "ProductName" }" }{ Set testchange {
MERGEFIELD "EmployeeID" } }

If the data is
set up so that it simply lists the projects, as far as

mail
merge is concerned, it doesn't matter how many there are.

It
simply loops for as many projects as an employee has; you
don't make the copies, mail merge does.


You are wrong on that. Read http://support.microsoft.com/?
kbid=105888 very closely and/or try it yourself. It does
not loop for as many projects as an employee has.


Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun
8 2004)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any follow
question or reply in the newsgroup and not by e-mail :-)

 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
maro loops jsmonje General Discussion 1 September 21st, 2004 02:11 AM
AVI file loops ken doud Powerpoint 1 August 26th, 2004 06:22 AM
Music file restarts when presentation loops Patrick Powerpoint 2 May 26th, 2004 03:19 AM
Loops Worksheet Functions 3 May 13th, 2004 03:12 PM
Nested Loops - If function Aladin Akyurek Worksheet Functions 1 November 8th, 2003 02:46 AM


All times are GMT +1. The time now is 02:17 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 OfficeFrustration.
The comments are property of their posters.