Home |
Search |
Today's Posts |
#1
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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 | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Switch for mail merging telephone-number field | Mailmerge | |||
Quick Field Editor | Microsoft Word Help | |||
Enter data in 1 text form field & have multiple locations fill | Microsoft Word Help | |||
Switch an image dynamically based on mail merge field - possible? | Mailmerge | |||
Text Form Field Ref in Footer Won't Update on Screen | Microsoft Word Help |