Single Digit Entry

P

Paul S Panoff

I have three separate cells defined as hundreds, tens and ones. I have
data validation set to only allow values between 0 and 9. Is there any
way to go to the next cell after a digit has been entered, without
pressing ENTER, TAB or Right Arrow? (i.e. Press "7" on numeric keypad
on tens cell, automatically go to ones field.)
 
F

Frank Kabel

Hi Paul
not really possible. Harlan Grove posted some time ago a procedure
using API calls, etc. Problem is: Macros are not executed while you're
in edit mode. So you have to hit ENTER or TAB
 
G

Gord Dibben

Paul

When you are typing data in a cell you are in <ENTER> mode.

Excel has no way of knowing what is in a cell until you leave that cell by
Enter, TAB or arrowing out.

In short.....NO.

Gord Dibben Excel MVP
 
T

Tushar Mehta

There is a somewhat cumbersome way of doing this. You have to define a
OnKey procedure for each of the numbers. For example, the following
will cause the active cell to change as soon as someone types the number
7. Run the testOnKey procedure to enable the automatic change to the
active cell. The resetOnKey will return the functionality of the 7 key
to its default status. The OnKeySub does the actual work.

Sub testOnKey()
Application.OnKey "7", "OnKeySub"
End Sub
Sub resetOnKey()
Application.OnKey "7"
End Sub
Sub OnKeySub()
ActiveCell.Value = 7
ActiveCell.Offset(0, 1).Select
End Sub

At the very least you will have to set the OnKey procedure for each of
the numeric keys. Combine that with validation for non-numeric values.

Alternatively, you will have to define the OnKey procedure for *every*
keystroke. And, you can skip the validation stuff.

--
Regards,

Tushar Mehta
www.tushar-mehta.com
Business solutions leveraging technology
Microsoft Most Valuable Professional (MVP) 2000-2004
 
D

Dave Peterson

Another way is to build a tiny userform with just a textbox on it.

Add this code to the userform module:

Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii
Case 48 To 57 'Numbers 0-9
With ActiveCell
.Value = Chr(KeyAscii)
If .Column = 3 Then
.Offset(1, -2).Activate
Else
.Offset(0, 1).Activate
End If
End With
End Select
KeyAscii = 0
TextBox1.Value = ""

End Sub

Then add this to a general module to show the form:
Option Explicit
Sub testme01()
Cells(ActiveCell.Row, 1).Activate
UserForm1.Show
End Sub


I always start in column A and use A:C.
 
T

Tushar Mehta

Hi Gord,

Gord Dibben said:
Tushar

I must learn to never say "never"<g>

Maybe, but the solution I proposed is sufficiently clumsy that it might
be better to say "never." <g>

--
Regards,

Tushar Mehta
www.tushar-mehta.com
Excel, PowerPoint, and VBA add-ins, tutorials
Custom MS Office productivity solutions
 
Top