Kknd24 2024-06-18 10:31 采纳率: 0%
浏览 9

VBA学着做数据录入提示1004错误,求指导

img

img

img

img

img


用VBA学着做个数据录入窗口,命令都是跟着教学打上去的,这行错误命令那里错了,求指导!

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-18 10:31
    关注

    引自免费微信小程序:皆我百晓生

    从提供的信息来看,你在尝试创建一个VBA用户表单用于数据录入时遇到了1004错误,这通常意味着你访问了不存在的对象或属性。在你的代码中,问题可能出现在使用Range("a65536").End(xlUp)这一行上。xlUp应该写为xlUp(注意首字母大写),但更关键的是,End(xlUp)方法用于找到最后一个非空单元格,而a65536超出了Excel的范围(Excel的最大行数是1048576)。然而,即使使用正确的xlUp,如果列A的第65536行及以上的单元格为空,这将返回错误。

    解决这个问题的方法是使用更合理的行数来查找末尾非空单元格,例如使用Range("A1:A1048576")。但是,更简洁且高效的方法是仅查找列A中的最后一个非空单元格,无需指定一个固定的行号。以下是修改后的代码:

    Private Sub CommandButton1_Click()
        Dim k As Long
        With Sheet2.Range("A:A")
            k = .Find("*", .Cells(.Rows.Count, "A"), lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlPrevious).Row + 1
        End With
        
        Cells(k, 2) = Me.TextBox1.Value
        Cells(k, 1) = Me.TextBox2.Value
        Cells(k, 4) = Me.TextBox3.Value
        
        If Me.OptionButton1 = True Then
            Cells(k, 3) = "已用"
        ElseIf Me.OptionButton2 = True Then
            Cells(k, 3) = "未用"
        End If
        
        If Me.OptionButton3 = True Then
            Cells(k, 5) = "已领"
        ElseIf Me.OptionButton4 = True Then
            Cells(k, 5) = "未领"
        End If
    End Sub
    

    这段代码首先使用.Find("*", ...)函数在列A中寻找最后一个非空单元格,并通过lookat:=xlPartsearchorder:=xlByRows以及searchdirection:=xlPrevious参数确保找到的是最后一个非空单元格。找到后,k变量被设置为这个单元格的行号加一,这样就可以在下一行插入新的数据了。

    确保在你的代码中替换Sheet2为你实际工作簿中的工作表名称。如果工作表的名称中包含空格或特殊字符,记得使用单引号将其包围,例如Sheet2.Name应替换为'Sheet2 Name'(如果名称中包含空格的话)。希望这能解决你的问题!如果有任何进一步的问题或需要更多的帮助,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月18日