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

时间:2014-10-01 10:03:02

标签: vba excel-vba excel

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

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

      End If
End Sub

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

7 个答案:

答案 0 :(得分:12)

继续我的评论:

考虑使用Textbox1和CommandButton1

的示例Userform1

enter image description here

当您在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

您可以在此处找到活动:

enter image description here

答案 1 :(得分:6)

使用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

答案 2 :(得分:1)

直到今天依靠字符串解析才能完成这项工作,我很高兴我决定检查并查看其他人是如何做到这一点的。

我精炼了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

这可以进一步细化,以便在必要时只允许单个“+”,“ - ”等。

答案 3 :(得分:0)

我正在使用它:

Private Sub txtGiaNet_Change()
    If IsNumeric(txtGiaNet.Value) Then
        //if number do sth
    Else
        //if not, delete this character
        txtGiaNet.Value = Left(txtGiaNet.Value, Len(txtGiaNet.Value) - 1)
    End If

End Sub

答案 4 :(得分:0)

我用这个。它将只允许带小数的数字。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case vbKey0 To vbKey9, vbKeyBack, vbKeyClear, vbKeyDelete, _
        vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown, vbKeyTab
            If KeyAscii = 46 Then If InStr(1, TextBox1.Text, ".") Then KeyAscii = 0
        Case Else
            KeyAscii = 0
            Beep
    End Select
End Sub

答案 5 :(得分:0)

If TextBox1.Value <> "" Then
    Dim N As Boolean
    N = True
    Do While N
        If Not IsNumeric(TextBox1.Value) Then
            TextBox1.Value = Left(TextBox1.Value, Len(TextBox1.Value) - 1)
        Else
            N = False
        End If
    Loop
End If

答案 6 :(得分:0)

私人子TbCout_D_Edlp_Change()

将NotNumeric设置为布尔值

将TempValue设置为字符串

 If Not IsNumeric(TbCout_D_Edlp.Value) Then

    If TbCout_D_Edlp.Value <> "" Then
    
          NotNumeric = True
          
          MsgBox "Only numbers allowed"
          
          TempValue = Left(Me.TbCout_D_Edlp.Value, Len(Me.TbCout_D_Edlp.Value) - 1)
          
          While NotNumeric = True And TempValue <> ""
          
               If Not IsNumeric(TempValue) Then
          
                    TempValue = Left(TempValue, Len(TempValue) - 1)
                    
               
               Else
                    
                    NotNumeric = False
                    
               End If
    
          Wend
          
          Me.TbCout_D_Edlp.Value = TempValue
            
    End If
    
 End If

结束子