keypress

G

Garry Jones

I am a bit confused about keypress.

I can't quite get this to work, there seems to be a few ways to do this.

What I want to do is

Allow a user to press any number (0123456789) in a text box.

I want to allow them to press backspace as well in that text box.

I want to shut off all other keys. When they have entered a 3 digit
number the focus will move to textbox 2 where I will do the same thing
there.

So, if I am on the right lines...

Private Sub TextBox1_KeyPress(KeyAscii As Integer)
tstinput (keyascii)
End Sub

private sub tstinput
If KeyAscii <> 8 'allow backspace
Then
If Not IsNumeric(Chr$(KeyAscii)) Then
KeyAscii = 0
else
end if
else
end if
end sub

But this does not work, I am missing something here.

And when it is working I can add the length bit and move focus to next
textbox, I am content that I can do that at least. But I can not get the
hang of this keypress.

Any help appreciated.

Garry Jones
 
K

Ken Macksey

Hi

You could use something like this.


' in the general area

Const zero = 48
Const nine = 57
Const backspace = 8


'in the textbox keypress event

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If (KeyAscii <> backspace) And (KeyAscii < zero Or KeyAscii > nine) Then
KeyAscii = 0


End Sub

HTH

Ken
 
H

Harald Staff

Hi Garry

You should also allow arrows and Delete, they're pretty standard. Try this:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8 To 10, 13, 27, 44 'Control characters
Case 48 To 57 'numbers
Case Else 'Discard anything else
KeyAscii = 0
End Select
End Sub

Big question is wether you allow pasting with Ctrl V into it. That takes
some effort to do, but it's done like like this:

Private Sub TextBox1_KeyDown(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 86 And Shift = 2 Then
KeyCode = 0 'cancelled !
'optional validation and pasting of
'clipboard content goes here
End If
End Sub


As for "next after 3 digits":

Private Sub TextBox1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(TextBox1.Text) >= 3 Then TextBox2.SetFocus
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