将用户输入限制为Userform文本框上的整数

And*_*Dev 3 excel vba

我在userform上有一个文本框,我试图将用户输入限制为仅允许整数值.我能够做到这一点,但行为有点奇怪.首先,这是我的代码:

Private Sub txtAnswer_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   If (KeyAscii >= 48) And (KeyAscii <= 57) Then
       Me.txtAnswer.SetFocus
   Else
       KeyAscii = 0
       Me.txtAnswer.SetFocus
   End If
 End Sub
Run Code Online (Sandbox Code Playgroud)

问题是,在用户输入值后,焦点似乎远离文本框.此外,如果用户输入整数值,则从文本框中删除该值(即输入被"吃掉").SetFocus行是我尝试使控件行为正确,但它们似乎没有任何效果.

我想要做的就是确保用户不在文本框中输入类似"r"(或任何其他非整数值)的内容.任何整数值> = 0都是完全可以接受的(包括多个数字值,如10或1000000).

谁能明白为什么我的方法不起作用?我已经尝试了几种不同的方法并且搜索了很多,但我找不到有用的东西.

谢谢

Sid*_*out 7

迈出一步!

'~~> Disable Pasting CTRL V , SHIFT + INSERT
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If (Shift = 2 And KeyCode = vbKeyV) Or (Shift = 1 And KeyCode = vbKeyInsert) Then
        KeyCode = 0
    End If
End Sub

'~~> Preventing input of non numerics
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
      Case vbKey0 To vbKey9, vbKeyBack, vbKeyClear, vbKeyLeft, _
      vbKeyRight, vbKeyUp, vbKeyDown, vbKeyTab
      Case Else
        KeyAscii = 0
        Beep
    End Select
End Sub
Run Code Online (Sandbox Code Playgroud)


Rea*_*idy 5

您还可以使用正则表达式.

Private Sub txtAnswer_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    With CreateObject("VBScript.RegExp")
        .Pattern = "^\d*$"
        .IgnoreCase = True     

        If Not .Test(TextBox1.Value & Chr(KeyAscii)) Then KeyAscii = 0        
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

优点是,如果你需要检查更复杂的字符串组合,比如负整数,如下所示:

.Pattern = "^[-+]?\d*$"
Run Code Online (Sandbox Code Playgroud)

或者另一个例子没有前导零:

.Pattern = "^[1-9]{1}\d*$"
Run Code Online (Sandbox Code Playgroud)