Thank you so much for your help.
Sorry if I sent this twice but I couldn't find the reply I just sent.
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 = "Zero"
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) & " Hundred "
End If
'** Do the tens & ones portion of 3-digit number
TensDone = False
'** Is it less than 10?
If Tens < 10 Then
English = English & " " & 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 & " " & EngNum(Ones)
End If
'** Add the word "thousand" if necessary.
If AmountPassed > 999.99 And LoopCount = 1 Then
English = English + " Thousand "
End If
'** Do pass through second three digits
LoopCount = LoopCount + 1
StartVal = 4
Wend
'** Done: Return english with pennies tacked on.
NumWord = Trim(English) & " and " & Pennies & "/100"
End Function
---In MS_Access_Professionals@yahoogroups.com, <strive4peace2008@...> wrote :
hi Mike,
adding onto Bill's comment ...
> "walk you through it"
yes. NumWord is not a built-in Access function; it is something custom written in your project, so we need to see what it says to help you change it ... and you need to know how to navigate the logic anyway, if you are to maintain this application.
Bill said, "Alt+F11 ... Then press Ctrl+F to open the Find dialog box. Type in NumWord and make sure you choose to search the entire project. That will find the function wherever it is."
keep searching the VBA code for the function declaration (and make sure the scope to find is PROJECT not just procedure or module) ...it will be something like:
[Public] Function NumWord( ... ) [as datatype]
copy that line, down to and including the one that says "End Function"
~~~
>"When I click on my contract form I get a screen that says:
General
Option Compare Database"
that means you are looking at the top of a module sheet, which can contain declarations and code for many procedures. Go to page 24 of this file and read the section on Modules ... then go read the whole chapter ~ and maybe all of Access Basics?
http://www.accessmvp.com/Strive4Peace/Access_Basics_Crystal_080113_Chapter_02.pdf If you've inherited a project someone else developed, take comfort in the fact that Option Explicit is at the top of the module ... so someone knew a bit about what they were doing ... so that is good.
~~~
Code just says:
Option Compare Database
Private Sub Label177_BeforeUpdate(Cancel As Integer)
End Sub
~~~
a control BeforeUpdate event might be the wrong place, to use this function, even though it may work. (Since it information that can be converted anytime, a control could be calculated with an expression to call the function to convert a number to words on the Control Source. If this text will be used to write a check, and the text is being stored in a field, then a control AFTERupdate event is a better place to calculate that since BeforeUpdate is typically reserved for data validation. If you store calculated fields, it is good to have a way for administrators to update calculations.)
~~~
as Bill mentioned, please remember to keep old messages to the thread when your respond, thanks
~crystal
On 11/4/2018 4:48 PM, Bill Mosca
wrmosca@... [MS_Access_Professionals] wrote:
No problem, Mike. We will walk you through it. First, open the database and press Alt+F11. That will take you to the code editor.
Then press Ctrl+F to open the Find dialog box. Type in NumWord and make sure you choose to search the entire project. That will find the function wherever it is.
Then copy and paste the entire funciotn into your post. Please try to remember to include the entire thread as some of us reply through email and need to see the whole conversation.
Sunday, 04 November 2018, 00:44PM -08:00 from mtamiazzo@... [MS_Access_Professionals] MS_Access_Professionals@yahoogroups.com:
Code just says:
Option Compare Database
Private Sub Label177_BeforeUpdate(Cancel As Integer)
End Sub
Tidak ada komentar:
Posting Komentar