excel - 如何修复 "comparing userform textbox with cellvalue"代码

标签 excel vba

我正在下一行添加一条记录,其中包含 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

enter image description here

最佳答案

您发布的代码可能已经非常有效,但我会采用不同的方法。

一个 序列号 是系统应该计算的值,而不是用户应该插入的值。因此,我的建议是使用以下功能获取下一个序列号:

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 作为值,使用您当前的代码,他们将拥有:
  • 键入“1” --> MsgBox弹出
  • 继续“10” --> MsgBox再次弹出
  • 继续“100” --> MsgBox又冒出来了!
  • 结束输入“1001” --> 终于!

  • ...这会引起用户对系统的高度仇恨:)

    关于excel - 如何修复 "comparing userform textbox with cellvalue"代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122997/

    相关文章:

    xml - 将多个 Access 表导出到单个 XML

    vba - 选择从 3 到 305 的所有奇数行

    vba - 在 Excel VBA 中,如何在 'state loss' 上保留关键变量(不写入单元格或文件)?

    excel - 自动将 Xls 转换为 CSV

    excel - 通过 VBA 函数插入 GetPivotData 公式

    excel - 为什么我的循环没有遍历所有值?

    excel - 比较两个单独工作表上的两个单独列

    mysql - Excel VBA : writing to mysql database

    包含隐藏列的 Excel 复制粘贴

    java - 如何格式化 POI 创建的 Excel 文档