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
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
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
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
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
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
Private Sub TbCout_D_Edlp_Change()
Dim NotNumeric As Boolean
Dim TempValue As String
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
End Sub
8条答案
按热度按时间jaxagkaj1#
关于我的评论:
考虑一个包含文本框1和命令按钮1的用户表单1示例
当你在
TextBox1
中输入任何内容时,change事件触发--即,输入一个字符触发Change()
事件并传递当前值,因此即使你输入负号,你的当前逻辑也会失败。您需要的是使用另一个事件,如
_AfterUpdate()
或_Exit()
,并强调第二个,因为您可以取消该事件:)您可以在此处找到活动:
mcvgt66p2#
使用KeyPress事件,并放弃任何非数字输入:
wz3gfoph3#
到目前为止,我一直依赖于字符串解析来完成这项工作,我很高兴我决定检查一下,看看其他人是如何做的,并发现了这个问题。
我改进了Ruben Alvarez的精彩答案。下面只允许输入数字,并且只有一个小数点。
这可以进一步细化,以便在必要时只允许单个“+"、“-”等。
x8goxv8g4#
我用这个。它只允许带小数的数字。
z9smfwbn5#
我用的是:
1yjd4xko6#
gzszwxb47#
nkkqxpd98#
FWIW,我可以接受OP对接受值类型的限制,但不能接受在不适当的时间到达的msgbox(例如使用Backspace时)。要解决此问题,我在工作表中创建了计算字段(“Value_AnyGood”)对输入的数据使用ISNUMBER函数。然后,我对任何离开输入数据的UF的事件进行了“True”测试。这导致了一个进程捕获任何非数字输入,但没有弹出合法编辑努力的消息。如果值为False,它会让用户知道,然后结束例程,显示当前的UF。