Excel 限制文本框中逗号后的位数
我在userform中有一个文本框,它将只填充数字、逗号或点。我知道如何限制只使用那些字符。我的问题是,是否可以将填充值限制为昏迷/点后的2位数字 所以当我输入像:Excel 限制文本框中逗号后的位数,excel,vba,textbox,Excel,Vba,Textbox,我在userform中有一个文本框,它将只填充数字、逗号或点。我知道如何限制只使用那些字符。我的问题是,是否可以将填充值限制为昏迷/点后的2位数字 所以当我输入像:1023456这样的值时,它不允许我在没有任何操作的情况下键入6 编辑: 我不能得到这个。。。我尝试测试这里给出的代码:但是它匹配的东西太多了。当我在逗号后键入超过2位数字时,它仍然匹配为良好字符串。例如,我使用了: \d{0,2}(\,\d{1,2})? [0-9]?[0-9]?(\,[0-9][0-9]?)? 我做错了什么 Pri
1023456
这样的值时,它不允许我在没有任何操作的情况下键入6
编辑:我不能得到这个。。。我尝试测试这里给出的代码:但是它匹配的东西太多了。当我在逗号后键入超过2位数字时,它仍然匹配为良好字符串。例如,我使用了:
\d{0,2}(\,\d{1,2})?
[0-9]?[0-9]?(\,[0-9][0-9]?)?
我做错了什么
Private Sub netto_Change()
Dim regEx As New VBScript_RegExp_55.RegExp
regEx.Pattern = "\d{0,2}(\,\d{1,2})?"
If regEx.Test(netto.Value) = True Then MsgBox ("It works!")
End Sub
编辑2:好的,我真的很接近我得到了这个代码:
^[0-9]+[\,\.]?[0-9]?[0-9]$
,但缺少一件事。此模式还应适用于以下字符串:321,
结尾带有逗号\dot,但后面没有任何内容。怎么办?文本框控件(至少有两个:ActiveX和UserForm)具有可用于验证数据的事件 在用户窗体上:
Private Sub TextBox1_Change()
' QA text here
End Sub
还有其他一些事件,比如KeyDown()和Exit(),可能工作得更好。这假设在用户完成对文本框的输入后,您有事件代码来捕获。该代码应该调用以下函数。如果字符串是好的,函数将返回True,如果字符串是坏的,函数将返回False。您的代码必须决定如何处理False:
Public Function QualCheck(S As String) As Boolean
Dim L As Long, CH As String, I As Long
QualCheck = False
L = Len(S)
For I = 1 To L
CH = Mid(S, I, 1)
If CH Like "[0-9]" Or CH = "." Or CH = "," Then
Else
MsgBox "bad character " & CH
Exit Function
End If
Next I
If InStr(S, ".") + InStr(S, ",") = 0 Then
QualCheck = True
Exit Function
End If
If InStr(S, ".") > 0 Then
ary = Split(S, ".")
If Len(ary(1)) > 2 Then
MsgBox "too many characters after ."
Else
QualCheck = True
End If
Exit Function
End If
If InStr(S, ",") > 0 Then
ary = Split(S, ",")
If Len(ary(1)) > 2 Then
MsgBox "too many characters after ,"
Else
QualCheck = True
End If
End If
End Function
注:
这段代码不依赖于正则表达式,我花了一些时间思考,并就如何处理这一问题提出了不同的想法 首先,我使用了
KeyPress
event来防止输入任何不同于0-9、逗号和点的字符。为了使我的代码按我所希望的那样工作,我将代码添加到Change
事件中<代码>如果句子检查我的文本框输入中是否有逗号或点。如果是,则限制maxlength
Private Sub netto_Change()
Dim znaki As Byte
znaki = Len(netto.Value)
If InStr(1, netto.Value, ".", vbTextCompare) > 0 Or InStr(1, netto.Value, ",", vbTextCompare) > 0 Then
If netto.MaxLength = znaki + 1 Or netto.MaxLength = znaki Then
Else
netto.MaxLength = znaki + 2
End If
Else
netto.MaxLength = 0
End If
End Sub
Private Sub netto_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc(",")
Case Asc(".")
Case Else
KeyAscii = 0
End Select
End Sub
张贴您用于处理文本框值的代码。在您的应用程序中,逗号是否表示千位分隔符或小数点,或者两者都不表示?@rajah9这是小数点。所以,这是一个不可能增加更多数字的例子——特别是偶然的。@Gary的学生到目前为止,我还没有想到任何方法来实现它。我甚至不确定这是否可能。VBA可以使用正则表达式。看见如果您更改.pattern,使其有一个“、dd”,那么它将只接受逗号后的2位数字。尝试一下,并用您的代码创建一个新线程。说明您使用的文本框类型和位置:工作表上的控件,UserForm。实际上,不是
之后的,而是更改时的。这就是为什么逗号/点后的第三位数字不能输入或可以输入,但必须立即删除。感谢您的努力!如果你有一个想法,测试它会很好。