View Single Post
  #19   Report Post  
Posted to microsoft.public.word.mailmerge.fields
Peter Jamieson Peter Jamieson is offline
external usenet poster
 
Posts: 4,582
Default Mail merge .. . If Then Else

Sorry, had to dash earlier and my examples were not quite as I had tested
before posting. And certainly with the \*Upper, the "quoteless" example
works as you say.

But I don't actually get the same results as you describe below either. For
example.

1.
{QUOTE{ASK PatientCode}"1"
{IF {PatientCode \*Upper} = XX @}"2"
{IF "{PatientCode \*Upper}" = XX @}"3"
{ IF {PatientCode \*Upper} = "XX" @}"4"
{IF "{PatientCode \*Upper}" = "XX" @}}

If you input 'XX' or 'xx' into the 'ASK PatientCode' field, you get
'1@2@3@4@' as the output. Anything else
returns nothing, which
is as it should be. Mergefields work the same way.


Yes, that's what I get assuming "nothing" means "1234" :-) I haven't
re-checked the Mergefields scenario yet.

2.
If XX is a bookmark, as in:
{QUOTE{ASK PatientCode}{ASK XX}"1"
{IF {PatientCode \*Upper} = XX @}"2"
{IF "{PatientCode \*Upper}" = XX @}"3"
{ IF {PatientCode \*Upper} = "XX" @}"4"
{IF "{PatientCode \*Upper}" = "XX" @}}
and input 'XX' or 'xx' into the 'ASK PatientCode' field, you get '1@2@34'
as the output (ie only the first and second versions
work). Anything else returns nothing.


Here, I don't get 1@2@34 in any circumstances. I wonder why our results are
different?

If PatientCode is xx or XX, and I input nothing into XX, I get 1@2@3@4@,
possibly because Word removes the XX bookmark in that case and it's
effectively the same test as (1). Howerver, I also get the same result if
PatientCode is xx or XX and I input "XX" (without the quotes) into XX.

If PatientCode is xx or XX, and I input anything except blank or XX into the
XX field, I get 1@234@ , i.e. versions 1 and 4 work OK.

If PatientCode is aa, I always get 1234.

3.
If you want to use 'XX' as a bookmark, that will work in the 3rd & 4th
cases too *if the 'XX' is in a field*, as in:
{QUOTE{ASK PatientCode}{ASK XX}"1"
{IF {PatientCode \*Upper} = {XX} @}"2"
{IF "{PatientCode \*Upper}" = {XX} @}"3"
{ IF {PatientCode \*Upper} = "{XX}" @}"4"
{IF "{PatientCode \*Upper}" = "{XX}" @}}
Now, if you input 'AA' or 'aa' into the 'ASK PatientCode' field, and 'AA'
(upper case only) in the 'ASK XX' field, or any other
matching characters, you get '1@2@3@4@' as the output but anything else
returns nothing.


I get the same

4. Now if you go back to (2) and remove the \*Upper (which was the scenario
I was actually testing this morning):

If XX is a bookmark, as in:
{QUOTE{ASK PatientCode}{ASK XX}"1"
{IF {PatientCode } = XX @}"2"
{IF "{PatientCode }" = XX @}"3"
{ IF {PatientCode } = "XX" @}"4"
{IF "{PatientCode }" = "XX" @}}


a. PatientCode=xx,XX=xx: 1@2@34
b. PatientCode=xx,XX=XX: 1@23@4
c. PatientCode=XX,XX=xx: 1@234@
d. PatientCode=XX,XX=XX: 1@2@3@4@
e. PatientCode=aa,XX=aa: 1@2@34
f. PatientCode=aa,XX=AA: 1234
g. PatientCode=AA,XX=aa: 1234
h. PatientCode=AA,XX=AA: 1@2@34
i. PatientCode=aa,XX=xx: 1234
j. PatientCode=aa,XX=XX: 1234
k. PatientCode=AA,XX=xx: 1234
l. PatientCode=AA,XX=XX: 1234
m. PatientCode=xx,XX=aa: 1@234
n. PatientCode=xx,XX=AA: 1@234
o. PatientCode=XX,XX=aa: 1@234@
p. PatientCode=XX,XX=AA: 1@234@
q. PatientCode=aa,XX=PatientCode

Only the fully quoted version correctly compares PatientCode with "XX" every
time. As I understand it, what's happening is that Word looks at the
unquoted { PatientCode } and if it's xx or XX, uses the value of { xx }/{
XX } which are the same, and uses { XX } when it sees unquoted XX. At least
I think that explanation fits everything. In which case there is always
potentially a problem if an unquoted field's contents happens to match the
name of a bookmark. Adding the \*Upper switch seems to make things work
differently, and perhaps other things do as well, but I haven't worked right
through the samples on that front.

Which is all very well, but may still not result in a solution for the
original question...

Regards,

Peter Jamieson


"macropod" wrote in message
...
Hi Peter,

Actually, after removing the 'MERGEFIELD', for use with an ASK field, all
those scenarios work for 'XX' as a string, but not as a
bookmark. Tested with:
{QUOTE{ASK PatientCode}"1"
{IF {PatientCode \*Upper} = XX @}"2"
{IF "{PatientCode \*Upper}" = XX @}"3"
{ IF {PatientCode \*Upper} = "XX" @}"4"
{IF "{PatientCode \*Upper}" = "XX" @}}

If you input 'XX' or 'xx' into the 'ASK PatientCode' field, you get
'1@2@3@4@' as the output. Anything else returns nothing, which
is as it should be. Mergefields work the same way.

If XX is a bookmark, as in:
{QUOTE{ASK PatientCode}{ASK XX}"1"
{IF {PatientCode \*Upper} = XX @}"2"
{IF "{PatientCode \*Upper}" = XX @}"3"
{ IF {PatientCode \*Upper} = "XX" @}"4"
{IF "{PatientCode \*Upper}" = "XX" @}}
and input 'XX' or 'xx' into the 'ASK PatientCode' field, you get '1@2@34'
as the output (ie only the first and second versions
work). Anything else returns nothing.

If you want to use 'XX' as a bookmark, that will work in the 3rd & 4th
cases too *if the 'XX' is in a field*, as in:
{QUOTE{ASK PatientCode}{ASK XX}"1"
{IF {PatientCode \*Upper} = {XX} @}"2"
{IF "{PatientCode \*Upper}" = {XX} @}"3"
{ IF {PatientCode \*Upper} = "{XX}" @}"4"
{IF "{PatientCode \*Upper}" = "{XX}" @}}
Now, if you input 'AA' or 'aa' into the 'ASK PatientCode' field, and 'AA'
(upper case only) in the 'ASK XX' field, or any other
matching characters, you get '1@2@3@4@' as the output but anything else
returns nothing.

Cheers

--
macropod
[MVP - Microsoft Word]


"Peter Jamieson" wrote in message
...
| As I've said before, there are occasions when you have to have at least
some
| of the quotes. They may be unusual, but it's good defensive programming
to
| use them, although of course, in the absence of a complete specification
of
| what fields do, even adding quotes isn't necessarily going to have the
| desired result in all situations. For example, in this case, try
inserting a
| bookmark called XX in the document (it can be a regular bookmark or
created
| using { SET XX something }, then evaluate
|
| { IF {MERGEFIELD PatientCode \*Upper } = XX @ }
|
| { IF "{MERGEFIELD PatientCode \*Upper }" = XX @ }
|
| { IF {MERGEFIELD PatientCode \*Upper } = "XX" @ }
|
| { IF "{MERGEFIELD PatientCode \*Upper }" = "XX" @ }
|
| I think only the last one works correctly where PatientCode is xx or XX.
|
| That's why I usually advise use of quotes.
|
| Peter Jamieson
| "macropod" wrote in message
| ...
| Hi Doug,
|
| Since there's no spaces in the test condition or true/false results,
the
| field works equally well with no quote characters:
| {IF{MERGEFIELD PatientCode \*Upper} = XX @}
|
| Another potential issue is whether the 'PatientCode' field contains
| exactly 'XX' - no more & no less. The OP said "As part of the
| testing i have printed to screen Value X to confirm it contains the
data
| for the condition to be met". That's only one 'X'. Or is
| 'Value X' the name of a/the field?
|
| Cheers
|
| --
| macropod
| [MVP - Microsoft Word]
|
|
| "Doug Robbins - Word MVP" wrote in message
| ...
| | Remove the quotation marks from "{ MERGEFIELD PatientCode \*Upper}"
| |
| | --
| | 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
| |
| | wrote in message
| | oups.com...
| | On 8 Feb, 16:55, wrote:
| | On 8 Feb, 16:15, "Graham Mayor"
wrote:
| |
| |
| |
| |
| |
| | And do test the result of {Mergefield PatientCode} without a
| condition
| | to
| | ensure it reproduces exactly what you think it should
reproduce.
| Try
| | also
| |
| | { IF { MERGEFIELD PatientCode \*Upper} = "XX" "@" }
| | --
| |
| | Graham Mayor - Word MVP
| |
| | My web sitewww.gmayor.com
| | Word MVP web sitehttp://word.mvps.org
| |
| |
| | Peter Jamieson wrote:
| | 1. Are all the {} the special field code braces that you can
| insert
| | using ctrl-F9?
| | 2. Is the value definitely XX and not xx, xX etc?
| | 3. Try adding double quotes around the { MERGEFIELD } field,
i.e.
| |
| | { IF "{ MERGEFIELD PatientCode }" = "XX" "@" "" }
| |
| | Peter Jamieson
| | wrote in message
| | roups.com...
| | On 8 Feb, 15:33, wrote:
| | Hi - i am having a few problems with the if then else
| conditional
| | statement with word mail merge. The logic that i am
looking to
| | implement is if Value X = XX then print @ else print
nothing.
| The
| | code is below. Now this seems very simple but for some
reason
| | doesnt work and even when the condition is met it does not
| print @.
| | As part of the testing i have printed to screen Value X to
| confirm
| | it contains the data for the condition to be met but it
doesnt
| | write the @. { IF { MERGEFIELD PatientCode } = "XX" "@"
"" }
| |
| | So the issue i have is that although the condition seems to
have
| | been
| | met it does not execute the correct part of the conditional
| | statement. The data being used for the mail merge comes
from a
| SQL
| | 2000 SP3a database.- Hide quoted text -
| |
| | - Show quoted text -
| |
| | Hi - thanks for your suggestions - i cant try them at the moment
as
| | production is down . With regards word mail merge i dont have
any
| | exeperience apart from the hour or so that i have spent looking
at
| | this issue (although i have numerous years of development
| experience -
| | somewhat offset by the fact i am now a manager ).
| |
| | In one of the suggestions the code used \*Upper - i pressume that
| | there must be numerous other switches e.g. \*Lower etc. Is there
a
| FAQ
| | that describes all these 'switches' - cant seem to find mention
of
| | them Word Help.
| |
| | Thanks in advance,
| |
| | CM- Hide quoted text -
| |
| | - Show quoted text -
| |
| |
| | Hi - just tried the suggested fix and it still doesnt work - the
code
| | is below;
| |
| | { IF "{ MERGEFIELD PatientCode \*Upper}" = "XX" "@" }
| |
| | Any other suggestions - this is really frustrating because for all
| | intents and purposes it should work. I have tried using the same
| | logic with another merge field and it works fine - could there be
| | anything in particular with this field that might mean that the
| | condition is not being met?
| |
| | Thanks in advance,
| |
| | CM
| |
| |
| |
| |
| |
| |
|
|
|
|