制作VBA表单TextBox仅接受数字(包括+, - 和.)

Add*_*ddy 5 excel vba excel-vba

我有简单的textBox,我想验证它的输入,包括"+"," - "和".".这是我尝试过的

Private Sub DisplayValue_TextBox_Change()
If Not IsNumeric(DisplayValue_TextBox.Value) Then
               MsgBox "Only numbers allowed"

      End If
End Sub
Run Code Online (Sandbox Code Playgroud)

但是这只接受数字0-9没有负数,正值或浮点值.

小智 12

继我的评论:

考虑一个带有Textbox1和CommandButton1的示例Userform1

在此输入图像描述

当您TextBox1在更改事件中输入任何内容时触发 - 即.键入一个字符会触发Change()事件并传递当前值,因此即使您键入负号,您当前的逻辑也会失败.

你需要的是在第二个事件中使用另一个类似_AfterUpdate()_Exit()强调的事件,因为你可以取消事件:)

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsNumeric(TextBox1.Value) Then
        MsgBox "only numbers allowed"
        Cancel = True
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到活动:

在此输入图像描述


小智 8

使用KeyPress事件,并丢弃任何非数字条目:

Private Sub txtShift1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Debug.Print KeyAscii
If KeyAscii >= 48 And KeyAscii <= 57 Then
    Debug.Print "number"
Else
    Debug.Print "other"
    KeyAscii = 0
End If
End Sub
Run Code Online (Sandbox Code Playgroud)


bla*_*orx 8

到目前为止,我一直依靠字符串解析来完成这项工作,我很高兴我决定检查并看看其他人是如何做的,并找到了这个 Q。

我已经完善了鲁本·阿尔瓦雷斯 (Ruben Alvarez) 的出色回答。下面只允许输入数字,并且只允许一位小数点。

Private Sub txtShift1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    Select Case KeyAscii
        Case 46
            If InStr(1, txtShift1, ".") > 0 Then KeyAscii = 0
        Case 48 To 57
        Case Else
            KeyAscii = 0
    End Select

End Sub
Run Code Online (Sandbox Code Playgroud)

这可以进一步细化以仅允许单个“+”、“-”等必要。