我有简单的textBox,我想验证它的输入,包括" +" ," - "和"。"这是我试过的
Private Sub DisplayValue_TextBox_Change()
If Not IsNumeric(DisplayValue_TextBox.Value) Then
MsgBox "Only numbers allowed"
End If
End Sub
但是这只接受数字0-9没有负数,正值或浮点数值。
答案 0 :(得分: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
您可以在此处找到活动:
答案 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
结束子