-1

我正在尝试编辑代码以通过使用 Excel 的用户窗体实际输入数据来传输数据,即输入到工作表中。听起来可能很复杂。换句话说,在用户窗体中输入数据,然后单击用户窗体上插入的“命令按钮”,数据将放置在表格的下一个空行中。

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

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

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

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

我一直搜索到蓝色 - 我只是在学习 VBA,希望能在解释可能出现的问题方面提供一些帮助。很可能是 Table vs DataTable 的事情——不确定。Excels 的 DataForms 使用起来太不灵活了,因为我需要使用“组合框”来确保只选择正确的选项。

感谢其他网站的建议或推荐,可能有利于查看。任何人都可以推荐他们上过的一个好的在线 VBA 课程。更喜欢推荐而不是“在黑暗中射击”。最美好的一周祝福!!

4

1 回答 1

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
于 2013-06-06T19:54:47.323 回答