mlcktmguy
asked on
Restricting Input On an Unbound field
I posted this question previously on EE and accepted a response that I thought would work. Now that I am implementing the solution I find that my issues is not resolved.
Here is the original question:
I have an unbound field on my form. A valid entry in this box could be any long integer number up to nine positions.
I have the format defined as 000000000. I got a cancellation today when I tried to treat the entered field as numeric.
Today I was notified of a cancellation and the error displayed was "13 Type Mismatch". Apparently I need to do more to restrict the input to numeric only and limit the length to no more than 9 digits.
I can't figure out how they got something in there that led to a type mismatch. How is that possible? In my testing I can't get anything in there other than a number.
I was able to get an overflow error by entering 1 followed by 11 0's.
How can I tighten up the entry so only digits with a max length of 9 can be entered?
This is the solution I accepted:
I tried that setting up an error trapping routine in both the Exit And Lost Focus Event of the field but they are not being invoked. I still can create an overflow error by entering more than nine digits in the field and clicking some other control on the form.
The field is named 'openingBRT' Here is what I tried:
Here is the original question:
I have an unbound field on my form. A valid entry in this box could be any long integer number up to nine positions.
I have the format defined as 000000000. I got a cancellation today when I tried to treat the entered field as numeric.
Today I was notified of a cancellation and the error displayed was "13 Type Mismatch". Apparently I need to do more to restrict the input to numeric only and limit the length to no more than 9 digits.
I can't figure out how they got something in there that led to a type mismatch. How is that possible? In my testing I can't get anything in there other than a number.
I was able to get an overflow error by entering 1 followed by 11 0's.
How can I tighten up the entry so only digits with a max length of 9 can be entered?
This is the solution I accepted:
A great way for that is to define some Code Event Procedure code in the On Exit "field", something like this:
Private Sub MyText_Exit(Cancel As Integer)
If Not IsNumeric(MyText.Value) Then
Cancel = True
ElseIf Len(MyText.Value) > 9 Then
Cancel = True
End If
End Sub
I tried that setting up an error trapping routine in both the Exit And Lost Focus Event of the field but they are not being invoked. I still can create an overflow error by entering more than nine digits in the field and clicking some other control on the form.
The field is named 'openingBRT' Here is what I tried:
Private Sub openingBRT_Exit(Cancel As Integer)
If thisIsAValidBRTFormat(Me.openingBRT) Then
Else
Me.openingBRT.SetFocus
Cancel = True
End If
'
End Sub
Private Sub openingBRT_LostFocus()
If thisIsAValidBRTFormat(Me.openingBRT) Then
Else
Me.openingBRT.SetFocus
Cancel = True
End If
'
End Sub
Public Function thisIsAValidBRTFormat(passedBRT As Variant) As Boolean
'
thisIsAValidBRTFormat = False
'
If Len(Trim(Nz(passedBRT, ""))) = 8 Or Len(Trim(Nz(passedBRT, ""))) = 9 Then
MsgBox "BRT must be 8 or 9 positions long, please re-enter"
Exit Function
End If
'
Dim i As Long
Dim wkBRT As String
wkBRT = Trim(Nz(passedBRT, ""))
'
For i = 1 To Len(wkBRT)
If thisIsANumber(Mid(wkBRT, i, 1)) Then
Else
MsgBox "Only numbers are permitted in the BRT, please re-enter"
Exit Function
End If
Next i
'
thisIsAValidBRTFormat = True
'
End Function
Public Function thisIsANumber(passedChar As String) As Boolean
'
If passedChar = "0" Or _
passedChar = "1" Or _
passedChar = "2" Or _
passedChar = "3" Or _
passedChar = "4" Or _
passedChar = "5" Or _
passedChar = "6" Or _
passedChar = "7" Or _
passedChar = "8" Or _
passedChar = "9" Then
'
thisIsANumber = True
Else
thisIsANumber = False
End If
'
End Function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
and the validation text to "Must be less than 1,000,000,000
and the format as #0
?