我正在下一行添加一条记录,其中包含 sr.no 和其他数据。当我在用户表单文本框中输入一个数字时,它必须检查它是否不重复。数字是按顺序排列的
Private Sub TextBox1_Change()
Dim x As Long
Dim y As Worksheet
Set y = Sheets("Data")
x = y.Range("A" & Rows.Count).End(xlUp).Row
If CInt(TextBox1.Value) <= CInt((Sheets("Data").Range
.Cells(x, "A").Value))
Then
MsgBox "Duplicate serial no. found. Increase it"
End If
End Sub
最佳答案
您发布的代码可能已经非常有效,但我会采用不同的方法。
一个 序列号 是系统应该计算的值,而不是用户应该插入的值。因此,我的建议是使用以下功能获取下一个序列号:
Private Function getNextSerial() As Long
Dim x As Long
Dim y As Worksheet
Set y = Sheets("Data")
x = y.Range("A" & Rows.Count).End(xlUp).Row
getNextSerial = y.Cells(x, "A").Value + 1
End Function
...并直接在您的
TextBox1
中设置它当您初始化表单时。例如,假设您的表单名为 MyUserForm
,在 Initialize()
这种形式的事件你应该这样写:Me.TextBox1.Text = getNextSerial() '<-- write next serial
Me.TextBox1.Locked = True '<-- forbid writing
如果你真的想要用户输入序列号的方法,那么你仍然可以使用函数
getNextSerial()
。和写:If Me.TextBox1.Text <= getNextSerial() Then
...但是,请注意您在
TextBox.Change
中执行此操作事件。这意味着如果用户想要输入 1001 作为值,使用您当前的代码,他们将拥有:MsgBox
弹出MsgBox
再次弹出MsgBox
又冒出来了! ...这会引起用户对系统的高度仇恨:)
关于excel - 如何修复 "comparing userform textbox with cellvalue"代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122997/