我有下面的脚本,它只允许最大为31的整数,字符串的长度不超过2,并且必须是一个数值。
如果不满足,我想删除最后插入的值(这样用户就不能插入任何这些输入)。
私有子txtDay_Change()
If Me.txtDay.Value > 31 Or Len(Me.txtDay.Value) > 2 Or Not IsNumeric(Me.txtDay.Value) Then
Me.txtDay.Value = Left(Me.txtDay.Value, Len(Me.txtDay.Value) - 1)
Cancel = True
Else
Sheets("do not open!").Range("C1") = Me.txtDay.Value
End If
问题是,如果我插入一个文本或点击退格键,然后我得到以下错误:
我所做的是通过应用On error GoTo
来解决这个问题
Private Sub txtDay_Change()
On Error GoTo er
If Me.txtDay.Value > 31 Or Len(Me.txtDay.Value) > 2 Or Not IsNumeric(Me.txtDay.Value) Then
Me.txtDay.Value = Left(Me.txtDay.Value, Len(Me.txtDay.Value) - 1)
Cancel = True
Else
Sheets("do not open!").Range("C1") = Me.txtDay.Value
End If
er:
Cancel = True
现在看来是可行的。但是有人知道这是否是一个好的方法吗?有人知道为什么会发生这种情况吗?
1条答案
按热度按时间rekjcdws1#
您必须首先运行isNumeric-check-否则可能会发生将字符串与数字进行比较的情况-这将失败。
我将使用一个额外的函数来实现这一点:
然后,您可以像这样调用此函数:
If isDayValueOK(Me.txtDay.Value) = false then ...