Declare Function for global use then call on change event

G

gwoodby

Say i wanted to have a numbersonly function

I would Declare this in a new module, but when i call it

Function MyFunction(NewText as string)
On Error GoTo ErrorHandler
If IsNumeric(Chr(strTempAscii)) Or Chr(strTempAscii) = "-" Or _
Chr(strTempAscii) = "/" Or Chr(strTempAscii) = "\" Then

Else
strTempAscii = ""
TxtDtoAtto2.Text = Left(TxtDtoAtto2.Text, Len(TxtDtoAtto2.Text) -
1)
End If

ErrorHandler:
End Function


When i call it Like


Private Sub TxtDtoAtto2_Change()
MyFunction( TxtDtoAtto2)
End sub
Private Sub TxtDtoAtto2_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
strTempAscii = ""
strTempAscii = KeyAscii
End Sub

it doesnt work, Is there something im not doing?
 
G

Guest

Functions are intended to return values. Sum is a function that returns the
total value of all of the numbers. Your function is not returning a value.
You are passing in a value by reference and modifying it that way. In general
functions don't modify the inputs (not always true but generally a good
practice in VB). For example sum does not change any of the numbers that are
passed in. Take a look at this...

Function MyFunction(byval NewText as string) as string
On Error GoTo ErrorHandler
MyFunction = ""
If IsNumeric(Chr(strTempAscii)) Or Chr(strTempAscii) = "-" Or _
Chr(strTempAscii) = "/" Or Chr(strTempAscii) = "\" Then

Else
strTempAscii = ""
MyFunction = Left(NewText , Len(NewText ) -1)
End If

ErrorHandler:
End Function


'your function is still changing strTempAscii which is generally considered
to be
'a side effect. You normally want to avoid side effects in functions.
Private Sub TxtDtoAtto2_Change()
TxtDtoAtto2 = MyFunction( TxtDtoAtto2.text)
End sub
Private Sub TxtDtoAtto2_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
strTempAscii = ""
strTempAscii = KeyAscii
End Sub
 

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

Top