View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
Jim Cone Jim Cone is offline
external usenet poster
 
Posts: 3,290
Default TextBox validation before moving to next


The best practice is to minimize code placed in the user form module.
If you are directly accessing the controls then the code belongs in the form.
Other code should go in a standard module.
In your case, place Find_The_Name in a standard module and
call it from the form module passing it the UnitNo string...
I have changed Find_The_Name to a function and revised some of the code...

'In the Form module...
Sub Find_Name01()
Dim UnitNo As String
UnitNo = UserForm1.txtUnit01.Text
If UnitNo = "" Then
MsgBox "Make a valid entry"
Else
UserForm1.txtName01.Text = Find_The_Name(UnitNo)
End If
End Sub

'In a standard module
Function Find_The_Name(ByRef UnitN As String) As String
Dim CurrentTenant As String
Dim UnitList As Range
Dim rFound As Range
Set UnitList = ActiveSheet.Range("a:a")
Set rFound = UnitList.Find(What:=UnitN, _
After:=Range("A1"), LookIn:=xlValues, _
Lookat:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
If Not rFound Is Nothing Then
CurrentTenant = rFound.Offset(0, 3).Text
Else
CurrentTenant = "Couldn't find the unit number"
End If
Find_The_Name = CurrentTenant
End Function
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins / Excel Programming)


"LuisE"
wrote in message
I have an UserForm with some TextBoxes which individuals entries Id like to
validate before moving to the next Textbox. I want to force the user to make
a valid entry (non blank and right format) before moving to the next.
Should I place the code in the Form module??

Here is what I have for the first textbox which matches the entry to an
existing record
Sub Find_The_Name()
Set ws = ActiveSheet
Set UnitList = ws.Range("a:a")
With UnitList
Set rFound = .Find(What:=UnitNo, _
After:=Range("A1"), LookIn:=xlValues, _
Lookat:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)

If Not rFound Is Nothing Then
x = rFound.Address
CurrentTenant = ws.Range(x).Offset(0, 3).Text
Else
MsgBox "Couldn't find the unit number"
CurrentTenant = ""
Exit Sub
End If
End With
End Sub

Sub Find_Name01()
UnitNo = UserForm1.txtUnit01.Text
If UnitNo = "" Then
MsgBox "Make avalid entry"
Else
Call Find_The_Name
UserForm1.txtName01.Text = CurrentTenant
End If
End Sub

Thank you