Convert currency to text

S

Sandi V

If a user enters 34,106.25 in a numeric field, is it possible to convert that
to Thirty Four Thousand, One Hundred Six Dollars and Twenty Five Cents, place
it in another field for editing if necessary and then pass to a bookmark in
the document? My VBA level is still beginner -- if you have the answer
please be specific. Thanks in advance!

Sandi
 
G

Graham Mayor

See the relevant section of http://www.gmayor.com/formatting_word_fields.htm
re formatting numeric field amounts in words. If this is a form field then
you could use the result of that bookmarked form field in a REF field to
reproduce the text. Replace Text1 in the example on the web page with the
field bookmark name.

The web page http://xl.barasch.com/cCo11432.htm demonstrates an Excel macro
apparently sourced from Microsoft which will work without change in Word
vbs, http://www.gmayor.com/installing_macro.htm but you will need a macro
to call the SpellNumber function eg at its most basic:

Sub NumAsTxt()
Dim sText As String
sText = SpellNumber(34106.25)
Selection.TypeText sText
End Sub

Where you go from here rather depends on what sort of field you wish to
collect the bracketed number from.

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
M

macropod

Hi Sandi,

Do note, though, that the CardText and DollarText functions write out the numbers in US fashion, regardless of your regional
settings. Thus, the 'and' between the thousands and hundreds that non-US users expect to see (as indicated in your own example) is
omitted. Plus the DollarText function still outputs the cents in a numeric format (eg 34/100 instead of 'thirty-four cents').
 
D

Doug Robbins - Word MVP

If you create the following macro/functions, and call the Convert macro on
exit from the formfield into which you insert the number (assumed to have
the bookmark name of "Amount", it will insert the converted amount into a
second formfield that is assumed to have the bookmark name of "AmountinText"

Sub Convert()
Dim MyNumber
With ActiveDocument
MyNumber = .FormFields("Amount").Result
.FormFields("AmountinText").Result = ConvertCurrencyToEnglish(ByVal
MyNumber)
End With
End Sub



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
'===========================================================


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

Graham Mayor

This is true, but the method on my web site (which I think you were involved
in) can easily be modified to use any decimal currency, and the other
method, which is essentially the same as that Doug has reproduced can also
easily be edited to use Euro, Pounds etc in place of Dollars - and the OP
did in fact ask for Dollars ;)

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
M

macropod

Hi Graham,
... the method on my web site (which I think you were involved in) ...
True. One of my concerns was that the OP had 'and' in the integer part of the expression, which the field codes don't support.
 

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

Similar Threads


Top