在VBA中使用“Set”关键字不明确

时间:2013-06-06 18:51:58

标签: excel-vba vba excel

我正在尝试编辑代码,以便通过使用Excel的UserForm实际输入数据来传输要输入工作表的数据。可能听起来很糟糕。换句话说,键入UserForm中的数据,并在单击UserForm上插入的“命令按钮”时,数据将被放置在表的下一个空行中。

使用的原始代码设置为ws = DataTable,ws是Dim作为工作表。虽然我知道Table是什么,但我不确定DataTable是什么,或者即使DataTable和数据表之间存在差异。我使用第一行作为列标题来制作数据表:字段1,字段2和字段3,并且包括5行是简单的。我设置ws = Table和Dim ws AS WorkSheet,Dim nextRow为Long。 UserForm将显示​​,并且命令按钮可以关闭/取消它。但是,当我在UserForm上输入3个数据并单击命令按钮输入/保存数据时,我收到错误:

运行时错误91:对象变量或未设置块变量

如果我选择“debug”,以黄色突出显示的代码行是:

nextRow = ws.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row

我一直在寻找蓝色 - 我正在学习VBA,并希望在解释可能的内容方面有所帮助 问题。很可能是Table vs DataTable的事情 - 不确定。 Excels的DataForms太不灵活,我不需要使用“组合框”来确保只选择正确的选项。

感谢其他可能有益于查看的网站的建议或推荐。任何人都可以推荐他们采取的良好的在线VBA课程。宁愿推荐与“在黑暗中射击”。 最好的一周祝福!!

1 个答案:

答案 0 :(得分:0)

你有没有尝试过(注意ws.Rows.Count

Set nextRow = ws.Cells(ws.Rows.Count,1).End(xlUp).Offset(1,0).Row

没有工作表说明Rows会返回可能不是您想要的活动工作表。

顺便说一句,这就是我获取表格最后一行的方法。我有使用

计算行数的功能
Public Function CountRows(ByRef r As Range) As Integer
    If IsEmpty(r) Then
        CountRows = 0
    ElseIf IsEmpty(r.Offset(1, 0)) Then
        CountRows = 1
    Else
        CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
    End If
End Function

然后我用它作为

Set r = ws.Range("A2")  'Or start of data
N = CountRows(r)
Set nextRow = r.Offset(N+1,0).Row