Reduce code

G

Guest

I have a several forms that use some code form Dave Peterson web site, to
limit the input on textboxes to "Numbers", is there a way to have a
"function" or like, to help reduce code size by eliminating some of the
repeated code for each textbox (about 50). code is below

I think I am looking for a way to reference the "live" textbox.

Private Sub TextBox11_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc("-")
If InStr(1, Me.TextBox11.Text, "-") > 0 Or Me.TextBox11.SelStart > 0
Then
KeyAscii = 0
End If
Case Asc(".")
If InStr(1, Me.TextBox11.Text, ".") > 0 Then
KeyAscii = 0
End If
Case Else
KeyAscii = 0
End Select
End Sub
 
D

Dave Peterson

I'd use something like:

Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Call CheckValidity(KeyAscii, Me.TextBox1)
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Call CheckValidity(KeyAscii, Me.TextBox2)
End Sub

Private Sub CheckValidity(KeyAscii As MSForms.ReturnInteger, _
myTB As MSForms.TextBox)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc("-")
If InStr(1, myTB.Text, "-") > 0 _
Or myTB.SelStart > 0 Then
KeyAscii = 0
End If
Case Asc(".")
If InStr(1, myTB.Text, ".") > 0 Then
KeyAscii = 0
End If
Case Else
KeyAscii = 0
End Select
If KeyAscii = 0 Then
Beep
End If
End Sub
 
G

Guest

Paste the following function in a VBA code module:

Public Function TextBox_KeyPress(WhichTB As Control, ByVal KeyAscii As
MSForms.ReturnInteger) As Boolean
Select Case KeyAscii
Case Asc("0") To Asc("9")
TextBox_KeyPress = True
Case Asc("-")
If InStr(1, WhichTB.Text, "-") > 0 Or WhichTB.SelStart > 0 Then
TextBox_KeyPress = False
Else
TextBox_KeyPress = True
End If
Case Asc(".")
If InStr(1, WhichTB.Text, ".") > 0 Then
TextBox_KeyPress = False
Else
TextBox_KeyPress = True
End If
Case Else
TextBox_KeyPress = False
End Select
End Function


Then change the KeyPress event code for each textbox to call the function,
like this:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If TextBox_KeyPress(Me.TextBox1, KeyAscii) = False Then KeyAscii = 0
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If TextBox_KeyPress(Me.TextBox2, KeyAscii) = False Then KeyAscii = 0
End Sub

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If TextBox_KeyPress(Me.TextBox3, KeyAscii) = False Then KeyAscii = 0
End Sub

Hope this helps,

Hutch
 

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