Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Help: Number to Words translation in Access Module

Status
Not open for further replies.

karan25

ISP
Jun 12, 2001
1
IN
Hello Friends,
I am novice Access user, and I wants to do a modification to the 'Numword'Access module programme by Alan Simpson's checkwriter, this module converts no. figure for cheque into words,like $1,555.55, it will list(One Thousan Five Hundred Fifty Five & Pennies 55/100) I am submitting his Module first and then lists modification.

Option Compare Database 'Use database order for string comparisons
Option Explicit 'Require explicit variable declaration
'This routine (c) 1994 Alan Simpson author of Understanding Access 2.0 by Sybex
'Variables used in NumWord() procedure defined here in Declarations.
Dim EngNum(90) As String
Dim StringNum As String, Chunk As String, English As String
Dim Hundreds As Integer, Tens As Integer, Ones As Integer
Dim LoopCount As Integer, StartVal As Integer
Dim TensDone As Integer
Dim Pennies As String






Static Function NumWord(ByVal AmountPassed As Currency) As String

'** Convert a number to words for filling in the Amount of a check
'** Example: NumWord(120.45) returns ONE HUNDRED TWENTY AND 45/100
'** Can handle numbers from 0 to $999,999.99
'** Created by Alan Simpson: Fax (619)756-0159
'** First working version, not yet fully tuned for speed or brevity.

'** The array below, and other variables, are dimensioned
'** in the Declarations section.

'** Fill EngNum array, if it's not filled already)
If Not EngNum(1) = "One" Then
EngNum(0) = ""
EngNum(1) = "One"
EngNum(2) = "Two"
EngNum(3) = "Three"
EngNum(4) = "Four"
EngNum(5) = "Five"
EngNum(6) = "Six"
EngNum(7) = "Seven"
EngNum(8) = "Eight"
EngNum(9) = "Nine"
EngNum(10) = "Ten"
EngNum(11) = "Eleven"
EngNum(12) = "Twelve"
EngNum(13) = "Thirteen"
EngNum(14) = "Fourteen"
EngNum(15) = "Fifteen"
EngNum(16) = "Sixteen"
EngNum(17) = "Seventeen"
EngNum(18) = "Eighteen"
EngNum(19) = "Nineteen"
EngNum(20) = "Twenty"
EngNum(30) = "Thirty"
EngNum(40) = "Forty"
EngNum(50) = "Fifty"
EngNum(60) = "Sixty"
EngNum(70) = "Seventy"
EngNum(80) = "Eighty"
EngNum(90) = "Ninety"
End If


'** Convert incoming Currency value to a string for parsing.
StringNum = Format$(AmountPassed, "000000.00")

'** Initialize other variables
English = ""
LoopCount = 1
StartVal = 1
Pennies = Mid$(StringNum, 8, 2)

'** Just in case the check is for less than a buck...
If AmountPassed < 1 Then
English = &quot;Zero&quot;
End If

'** Now do each 3-digit section of number.
While LoopCount <= 2
Chunk = Mid$(StringNum, StartVal, 3)
Hundreds = Val(Mid$(Chunk, 1, 1))
Tens = Val(Mid$(Chunk, 2, 2))
Ones = Val(Mid$(Chunk, 3, 1))

'** Do the hundreds portion of 3-digit number
If Val(Chunk) > 99 Then
English = English & EngNum(Hundreds) & &quot; Hundred &quot;
End If

'** Do the tens & ones portion of 3-digit number
TensDone = False

'** Is it less than 10?
If Tens < 10 Then
English = English & &quot; &quot; & EngNum(Ones)
TensDone = True
End If

'** Is it a teen?
If (Tens >= 11 And Tens <= 19) Then
English = English & EngNum(Tens)
TensDone = True
End If

'** Is it Evenly Divisible by 10?
If (Tens / 10#) = Int(Tens / 10#) Then
English = English & EngNum(Tens)
TensDone = True
End If

'** Or is it none of the above?
If Not TensDone Then
English = English & EngNum((Int(Tens / 10)) * 10)
English = English & &quot; &quot; & EngNum(Ones)
End If

'** Add the word &quot;thousand&quot; if necessary.
If AmountPassed > 999.99 And LoopCount = 1 Then
English = English + &quot; Thousand &quot;
End If

'** Do pass through second three digits
LoopCount = LoopCount + 1
StartVal = 4
Wend
'** Done: Return english with pennies tacked on.
NumWord = Trim(English) & &quot; and &quot; & Pennies & &quot;/100&quot;

End Function

This is his Module for Access, now I want to modify it for Indian Condition:

I wants figures in 10 Lacs and above i.e 99,99,999.55 and it should come in words like this: (Ninety Nine Lacs Ninety Nine Thousand Nine Hundred Ninety Nine and Paise Fifty Five only).

I tried to modify, but I am not programmere and this is beyond my capacity, any help will be greatful, Thanks.
 
Hhhhhhhh..!
Try it:

Option Compare Database
Option Explicit 'Require explicit variable declaration
'This routine (c) 1994 Alan Simpson author of Understanding Access 2.0 by Sybex
'Variables used in NumWord() procedure defined here in Declarations.
Dim EngNum(120) As String
Dim StringNum As String, English As String
Dim NumArr(4) As Integer

Static Function NumWord(ByVal AmountPassed As Currency) As String
Dim i, WorkNum As Integer
If Not EngNum(1) = &quot;One&quot; Then
EngNum(0) = &quot;&quot;
EngNum(1) = &quot;One&quot;
EngNum(2) = &quot;Two&quot;
EngNum(3) = &quot;Three&quot;
EngNum(4) = &quot;Four&quot;
EngNum(5) = &quot;Five&quot;
EngNum(6) = &quot;Six&quot;
EngNum(7) = &quot;Seven&quot;
EngNum(8) = &quot;Eight&quot;
EngNum(9) = &quot;Nine&quot;
EngNum(10) = &quot;Ten&quot;
EngNum(11) = &quot;Eleven&quot;
EngNum(12) = &quot;Twelve&quot;
EngNum(13) = &quot;Thirteen&quot;
EngNum(14) = &quot;Fourteen&quot;
EngNum(15) = &quot;Fifteen&quot;
EngNum(16) = &quot;Sixteen&quot;
EngNum(17) = &quot;Seventeen&quot;
EngNum(18) = &quot;Eighteen&quot;
EngNum(19) = &quot;Nineteen&quot;
EngNum(20) = &quot;Twenty&quot;
EngNum(30) = &quot;Thirty&quot;
EngNum(40) = &quot;Forty&quot;
EngNum(50) = &quot;Fifty&quot;
EngNum(60) = &quot;Sixty&quot;
EngNum(70) = &quot;Seventy&quot;
EngNum(80) = &quot;Eighty&quot;
EngNum(90) = &quot;Ninety&quot;
End If


'** Convert incoming Currency value to a string for parsing.
StringNum = Format$(AmountPassed, &quot;0000000.00&quot;)

'** Initialize other variables
English = &quot;&quot;

NumArr(1) = Val(Mid(StringNum, 1, 2))
NumArr(2) = Val(Mid(StringNum, 3, 2))
NumArr(3) = Val(Mid(StringNum, 5, 3))
NumArr(4) = Val(Mid(StringNum, 9, 2))

'** Just in case the check is for less than a buck...
If AmountPassed < 1 Then
English = &quot;Zero&quot;
End If

For i = 1 To 4
WorkNum = NumArr(i)

If (i = 4) And (NumArr(i) > 0) Then _
English = English & &quot; and Paise&quot;


If WorkNum > 99 Then
English = English & &quot; &quot; & EngNum(Int(WorkNum / 100)) & &quot; Hundred&quot;
WorkNum = WorkNum Mod 100
End If
If WorkNum > 19 Then
English = English & &quot; &quot; & EngNum(Int(WorkNum / 10) * 10)
If WorkNum Mod 10 > 0 Then _
English = English & &quot; &quot; & EngNum(WorkNum Mod 10)
Else
If WorkNum > 0 Then _
English = English & &quot; &quot; & EngNum(WorkNum)
End If

If (i = 1) And (NumArr(i) > 0) Then
English = English & &quot; Lacs&quot;
Else
If (i = 2) And (NumArr(i) > 0) Then
English = English & &quot; Thousand&quot;
Else
If (i = 4) And (NumArr(i) > 0) Then
English = English & &quot; only&quot;
End If
End If
End If
Next i
NumWord = Trim(English)
End Function

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top