Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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? |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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 -- HTH... Jim Thomlinson " wrote: 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? |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
How to declare global variable in Excel VBA? | Excel Programming | |||
call a function on control click event | Excel Discussion (Misc queries) | |||
Global array declare | Excel Programming | |||
Declare API call to Windows GetFile | Excel Programming | |||
Global event handler?? | Excel Programming |