Results 1 to 9 of 9
  1. #1
    trident is offline Competent Performer
    Windows 8 Access 2010 64bit
    Join Date
    Apr 2014
    Posts
    141

    How to Run SpellNumber in a report

    I found a VBA to convert numbers into words for MS Access. Now, I am trying to apply this to the report I have but I cannot make it work. Please help and explain to me where I am doing it wrong.



    In the report, I have the following Table:

    SN Description Quantity Unit Price Total Price Remarks
    1 Sample 1 2 25.00 50.00 Cars
    2 Sample 2 3 10.00 30.00 Bus
    3 Sample 3 1 5.00 5.00 Truck

    outside of this below the Total Price is the Total amount this is an unbound box with the following code:

    =Sum([Unit Price]*[Quantity]) - Name of the box is TotalAmt

    Below this unbound box is where I want to place the TotalAmt in words.

    I have placed the copied codes in a module and saved it as SpellNo.

    The unbound box for the amount in words was as follows:

    =SpellNo([TotalAmt])

    The error i got was #Name, or #Error

    I read in the comments that if the error was #Name, simply close the database and open it again, but no luck

    As for the #Error, still cant find a solution.

    Again my sincerest gratitude for the assistance and explanation.

    Trident

  2. #2
    andy49's Avatar
    andy49 is offline VIP
    Windows 10 Access 2007
    Join Date
    Nov 2016
    Location
    London
    Posts
    1,051
    What happens when you try spellno(sum([unit price]*[quantity])


    Sent from my iPhone using Tapatalk

  3. #3
    trident is offline Competent Performer
    Windows 8 Access 2010 64bit
    Join Date
    Apr 2014
    Posts
    141
    Dear Mr. Andy49,

    The error #NAME? appears

  4. #4
    andy49's Avatar
    andy49 is offline VIP
    Windows 10 Access 2007
    Join Date
    Nov 2016
    Location
    London
    Posts
    1,051
    Can we see the code for spellno?


    Sent from my iPhone using Tapatalk

  5. #5
    trident is offline Competent Performer
    Windows 8 Access 2010 64bit
    Join Date
    Apr 2014
    Posts
    141
    Below is the code copied from the net.

    Option Compare Database
    Option Explicit

    '****************
    ' Main Function *
    '****************
    Function SpellNumber(ByVal MyNumber, _
    Optional ByVal MyCurrency As String = "QAR") As String

    Dim Riyals, Dirhams, Temp
    Dim DecimalPlace, Count

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

    'Test for real value (number).
    If Not IsNumeric(MyNumber) Then
    SpellNumber = "Not Valid!"
    Exit Function
    End If

    ' String representation of amount.
    MyNumber = Trim(Str(MyNumber))

    ' Position of decimal place 0 if none.
    DecimalPlace = InStr(MyNumber, ".")

    ' Convert cents and set MyNumber to dollar amount.
    If DecimalPlace > 0 Then
    Dirhams = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
    MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
    End If

    Count = 1
    Do While MyNumber <> ""
    Temp = GetHundreds(Right(MyNumber, 3))
    If Temp <> "" Then Riyals = Temp & Place(Count) & Riyals
    If Len(MyNumber) > 3 Then
    MyNumber = Left(MyNumber, Len(MyNumber) - 3)
    Else
    MyNumber = ""
    End If
    Count = Count + 1
    Loop

    Select Case Riyals
    Case ""
    Riyals = "No " & GetCurrencyNarrative(MyCurrency, True)
    Case "One"
    Riyals = "One " & Left(GetCurrencyNarrative(MyCurrency, True) _
    , Len(GetCurrencyNarrative(MyCurrency, True)) - 1)
    Case Else
    Riyals = Riyals & " " & GetCurrencyNarrative(MyCurrency, True)
    End Select

    Select Case Dirhams
    Case ""
    Dirhams = " and No " & GetCurrencyNarrative(MyCurrency, False)
    Case "One"
    Dirhams = " and One " & GetCurrencyNarrative(MyCurrency, False)
    Case Else
    Dirhams = " and " & Dirhams & " " & _
    GetCurrencyNarrative(MyCurrency, False)
    End Select

    SpellNumber = Riyals & Dirhams
    End Function
    '*******************************************
    ' Converts a number from 100-999 into text *
    '*******************************************
    Private Function GetHundreds(ByVal MyNumber)
    Dim Result As String

    If Val(MyNumber) = 0 Then Exit Function

    MyNumber = Right("000" & MyNumber, 3)
    ' Convert the hundreds place.
    If Mid(MyNumber, 1, 1) <> "0" Then
    Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
    End If

    ' Convert the tens and ones place.
    If Mid(MyNumber, 2, 1) <> "0" Then
    Result = Result & GetTens(Mid(MyNumber, 2))
    Else
    Result = Result & GetDigit(Mid(MyNumber, 3))
    End If

    GetHundreds = Result
    End Function
    '*********************************************
    ' Converts a number from 10 to 99 into text. *
    '*********************************************
    Private Function GetTens(TensText)
    Dim Result As String
    Result = ""

    ' Null out the temporary function value.
    If Val(Left(TensText, 1)) = 1 Then
    ' If value between 10-19...
    Select Case Val(TensText)
    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
    ' If value between 20-99...
    Select Case Val(Left(TensText, 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

    Result = Result & GetDigit(Right(TensText, 1))
    ' Retrieve ones place.
    End If

    GetTens = Result
    End Function
    '*******************************************
    ' Converts a number from 1 to 9 into text. *
    '*******************************************
    Private Function GetDigit(Digit)
    Select Case Val(Digit)
    Case 1: GetDigit = "One"
    Case 2: GetDigit = "Two"
    Case 3: GetDigit = "Three"
    Case 4: GetDigit = "Four"
    Case 5: GetDigit = "Five"
    Case 6: GetDigit = "Six"
    Case 7: GetDigit = "Seven"
    Case 8: GetDigit = "Eight"
    Case 9: GetDigit = "Nine"
    Case Else: GetDigit = ""
    End Select
    End Function
    '*******************************************
    ' Collects which currency narrative to show *
    '*******************************************
    Private Function GetCurrencyNarrative(CountryCode As String, _
    b As Boolean) As String
    'b is a flag of TRUE or FALSE that returns either "Riyals" (TRUE)
    'or "Dirhams" (FALSE) for QAR or "Dollars" or "Cents"
    'based on the country code.

    Select Case UCase(CountryCode)
    Case Is = "QAR"
    If b Then
    GetCurrencyNarrative = "Riyals"
    Else
    GetCurrencyNarrative = "Dirhams"
    End If
    Case Is = "USD"
    If b Then
    GetCurrencyNarrative = "Dollars"
    Else
    GetCurrencyNarrative = "Cents"
    End If
    Case Is = "EUR"
    If b Then
    GetCurrencyNarrative = "Euros"
    Else
    GetCurrencyNarrative = "Cents"
    End If
    'Case Is = ""
    '[add your own currencies here to expand the choice...]

    Case Else 'catch if the above is not working - default to...
    If b Then
    GetCurrencyNarrative = "Riyals"
    Else
    GetCurrencyNarrative = "Dirhams"
    End If
    End Select
    End Function

  6. #6
    andy49's Avatar
    andy49 is offline VIP
    Windows 10 Access 2007
    Join Date
    Nov 2016
    Location
    London
    Posts
    1,051
    You've changed the name of the function?


    Sent from my iPhone using Tapatalk

  7. #7
    Bulzie is offline VIP
    Windows 7 64bit Access 2007
    Join Date
    Nov 2015
    Posts
    1,471
    Does TotalAmt have a correct value?
    =Sum([Unit Price]*[Quantity]) - Name of the box is TotalAmt

    As Andy49 said, you are calling SpellNo function but it is named SpellNumber

    Also test some things, instead of using a variable, call the function using a real number to test if that part works SpellNumber(10). If it does, then focus on the function call line.

  8. #8
    trident is offline Competent Performer
    Windows 8 Access 2010 64bit
    Join Date
    Apr 2014
    Posts
    141
    Bulzie,

    I think I saw your point, will check and revert back.

    Further, does the Dollars and Cents does have an effect on the code when calling it, as I remember, I did not put any currency box in the table itself.

  9. #9
    trident is offline Competent Performer
    Windows 8 Access 2010 64bit
    Join Date
    Apr 2014
    Posts
    141
    Thanks guys for the inputs, i was able to make it work for both Forms and Report. This is how I did it.

    1-search for the MS Access Numbers to Text
    2-for Forms, create an Unbound Text Box and put the code for the spellnumber in the On Dirty Event
    sample: =SpellNumber([FieldName])
    3-for Reports, create an Unbound Text Box and put the code for the spellnumber in the On Lost Focus

    Hope this could help out there.

    Trident

Please reply to this thread with any new information or opinions.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Other Forums: Microsoft Office Forums