Reply
 
Thread Tools Display Modes
  #1   Report Post  
JoyceA
 
Posts: n/a
Default CardText Field Switch

Hello,
I'm merging some Access data into Word documents (2003 versions of both
Access and Word). I'm trying to use the CardText switch to spell out some
numbers for two different purposes.

The first problem is with percentages that are not whole numbers. I am
trying to end up with something that goes " at a rate of five and one half
percent (5.5%) ". My switches work for whole numbers, but not fractions -
they get rounded up to the next whole number in the wording portion, not the
number part - so the result is "at a rate of six percent (5.5%)".

My other problem is with numbers over one million, I'm trying to end up with
something like "in the sum of One Million Dollars ($1,000,000.00)" This has
worked for me with CardText and DollarText with numbers under a million, but
not for large numbers.

Any suggestions would be greatly appreciated.

Thanks, Joyce

  #2   Report Post  
Doug Robbins
 
Posts: n/a
Default

The switches do have limitations.

For the currency, the following macro will handle up to
$999,999,999,999,999.99

Function ConvertCurrencyToEnglish(ByVal MyNumber)
Dim Temp
Dim Dollars, Cents
Dim DecimalPlace, Count


ReDim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "

MyNumber = Trim(Str(MyNumber))

DecimalPlace = InStr(MyNumber, ".")
If DecimalPlace 0 Then
Temp = Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2)
Cents = ConvertTens(Temp)
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber ""
'convert last 3 digits to English Dollars
Temp = ConvertHundreds(Right(MyNumber, 3))
If Temp "" Then Dollars = Temp & Place(Count) & Dollars
If Len(MyNumber) 3 Then
'remove last 3 comverted digits
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop

'clean up dollars
Select Case Dollars
Case ""
Dollars = "NoDollars"
Case "One"
Dollars = "One Dollar"
Case Else
Dollars = Dollars & " Dollars"
End Select

'clean up cents
Select Case Cents
Case ""
Cents = " And No Cents"
Case "One"
Cents = " And One Cent"
Case Else
Cents = " And " & Cents & " Cents"
End Select
ConvertCurrencyToEnglish = Dollars & Cents
End Function
=================================================
Private Function ConvertHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function

'append leading zeros to number
MyNumber = Right("000" & MyNumber, 3)

'do we have hundreds place digit to convert?
If Left(MyNumber, 1) "0" Then
Result = ConvertDigit(Left(MyNumber, 1)) & " Hundred "
End If

'do we have tens place digit to convert?
If Mid(MyNumber, 2, 1) "0" Then
Result = Result & ConvertTens(Mid(MyNumber, 2))
Else
'if not, then convert the ones place digit
Result = Result & ConvertDigit(Mid(MyNumber, 3))
End If
ConvertHundreds = Trim(Result)
End Function
================================================== ====
Private Function ConvertTens(ByVal MyTens)
Dim Result As String
'is value between 10 and 19?
If Val(Left(MyTens, 1)) = 1 Then
Select Case Val(MyTens)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else
Select Case Val(Left(MyTens, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select

'convert ones place digit
Result = Result & ConvertDigit(Right(MyTens, 1))
End If
ConvertTens = Result
End Function
================================================== ====
Private Function ConvertDigit(ByVal MyDigit)
Select Case Val(MyDigit)
Case 1: ConvertDigit = "One"
Case 2: ConvertDigit = "Two"
Case 3: ConvertDigit = "Three"
Case 4: ConvertDigit = "Four"
Case 5: ConvertDigit = "Five"
Case 6: ConvertDigit = "Six"
Case 7: ConvertDigit = "Seven"
Case 8: ConvertDigit = "Eight"
Case 9: ConvertDigit = "Nine"
Case Else: ConvertDigit = ""
End Select
End Function
================================================== =========
Sub TestAboveFunction()
Dim MyNumber
MyNumber = 551521896.32
MsgBox ConvertCurrencyToEnglish(ByVal MyNumber)
End Sub
================================================== =========

--
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
"JoyceA" wrote in message
...
Hello,
I'm merging some Access data into Word documents (2003 versions of both
Access and Word). I'm trying to use the CardText switch to spell out
some
numbers for two different purposes.

The first problem is with percentages that are not whole numbers. I am
trying to end up with something that goes " at a rate of five and one half
percent (5.5%) ". My switches work for whole numbers, but not fractions -
they get rounded up to the next whole number in the wording portion, not
the
number part - so the result is "at a rate of six percent (5.5%)".

My other problem is with numbers over one million, I'm trying to end up
with
something like "in the sum of One Million Dollars ($1,000,000.00)" This
has
worked for me with CardText and DollarText with numbers under a million,
but
not for large numbers.

Any suggestions would be greatly appreciated.

Thanks, Joyce



  #3   Report Post  
Peter Jamieson
 
Posts: n/a
Default

Yes, unfortunately \*Cardtext only deals with whole numbers as you noticed.

To do better you would probably either need to split the number up into the
whole number and the fractional parts, and generate the exact wording you
need using more than one field. Alternatively, if the number of different
possible percentages is finite, and preferably small (e.g. because they can
only be 0.5, 1, 1.5, 2, up to a known maximum) then you might be better off
simply creating a sequence of IF fields, along the lines of

{ IF { MERGEFIELD myfield } = 5 "five percent (5%)" ""
}{ IF { MERGEFIELD myfield } = 5.5 "five and one half percent (5.5%)" ""
}

etc. Don't try to nest the fields as there is a limit of around 20 levels of
nesting.

My other problem is with numbers over one million, I'm trying to end up
with
something like "in the sum of One Million Dollars ($1,000,000.00)" This
has
worked for me with CardText and DollarText with numbers under a million,
but
not for large numbers.


As long as the pattern of words is the same for numbers above a million
(e.g. 999,000,000 should be written Nine hundred ninety nine million" - in
the UK we have an "and" which doesn't appear when you use
Cardtext/Dollartext) then you can try something like the following, which
should take you up to 999999999999

{ SET x { MERGEFIELD mylargenumber }
}{ SET r { =MOD(x,1000000) }
}{ SET m { =INT(x-r)/1000000)) }
}{ IF { m } = 0 "" "{ m \*Cardtext } million }" }{ r \Cardtext }

I think you can probably modify that if you need to use the word "billion"
:-)

Peter Jamieson


"JoyceA" wrote in message
...
Hello,
I'm merging some Access data into Word documents (2003 versions of both
Access and Word). I'm trying to use the CardText switch to spell out
some
numbers for two different purposes.

The first problem is with percentages that are not whole numbers. I am
trying to end up with something that goes " at a rate of five and one half
percent (5.5%) ". My switches work for whole numbers, but not fractions -
they get rounded up to the next whole number in the wording portion, not
the
number part - so the result is "at a rate of six percent (5.5%)".

My other problem is with numbers over one million, I'm trying to end up
with
something like "in the sum of One Million Dollars ($1,000,000.00)" This
has
worked for me with CardText and DollarText with numbers under a million,
but
not for large numbers.

Any suggestions would be greatly appreciated.

Thanks, Joyce



Reply
Thread Tools
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Switch for mail merging telephone-number field Rene Mailmerge 3 December 5th 06 06:09 AM
Quick Field Editor alainr Microsoft Word Help 4 June 13th 05 04:10 AM
Enter data in 1 text form field & have multiple locations fill Lee Microsoft Word Help 1 March 16th 05 11:56 PM
Switch an image dynamically based on mail merge field - possible? Chris Hlusak Mailmerge 1 January 25th 05 12:11 AM
Text Form Field Ref in Footer Won't Update on Screen StarWine Microsoft Word Help 3 December 6th 04 07:17 PM


All times are GMT +1. The time now is 07:55 AM.

Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 Microsoft Office Word Forum - WordBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Word"