excel “VBA用户窗体无效过程”文本框

hujrc8aj  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(264)

我有下面的脚本,它只允许最大为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

现在看来是可行的。但是有人知道这是否是一个好的方法吗?有人知道为什么会发生这种情况吗?

rekjcdws

rekjcdws1#

您必须首先运行isNumeric-check-否则可能会发生将字符串与数字进行比较的情况-这将失败。
我将使用一个额外的函数来实现这一点:

Private Function isDayValueOK(value As Variant) As Boolean

If Not IsNumeric(value) Then Exit Function
'If Len(value) > 2 Then Exit Function 'you don't need this because then the number is greater than 100 and greater than 31.
If value > 31 Then Exit Function

isValueOK = True

End Function

然后,您可以像这样调用此函数:If isDayValueOK(Me.txtDay.Value) = false then ...

相关问题