I had to use the KeyDown event to change the UIOJKLM,. keys to numbers if the Shift key was NOT depressed:

Private Sub Text0_KeyDown(KeyCode As Integer, Shift As Integer)

' If Shift-only is pressed (Keycode=16) then do nothing. Otherwise, convert depending on
' status of shift key
If KeyCode <> 16 Then
If Shift = 0 Then ' Shift key NOT pressed; convert numeric keys to numbers, everything else to CAPS
Select Case KeyCode
Case 85: KeyCode = 49
Case 73: KeyCode = 50
Case 79: KeyCode = 51
Case 74: KeyCode = 52
Case 75: KeyCode = 53
Case 76: KeyCode = 54
Case 77: KeyCode = 55
Case 188: KeyCode = 56
Case 190: KeyCode = 57
' Case 65 To 72, 78, 80 To 90: KeyCode = (KeyCode - 32)
End Select
' Else ' Shift key PRESSED; convert everything to CAPS
End If
End If 'Keycode<>16, i.e., Shift-only pressed


And then the KeyPress event to automatically convert everything else to upper case:
Private Sub Text0_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 97 To 122: KeyAscii = (KeyAscii - 32)
End Select


So it's still kind of a keyboard interrupt but it only changes the KeyCode for the ones I need to be numeric.