设置表格Listobject单元格为工作表值时出现运行时错误 '91'

3
我试图创建一个子程序,将工作表中的各种值存储在变量中,然后将变量复制到列表对象(表)中的适当列的空行中。我一直遇到以下错误:
“运行时错误'91': 对象变量或With块变量未设置”
我尝试了很多变化,但仍然会出现错误,有时甚至会出现不同的错误。非常感谢您的任何建议。这是代码
Sub RecordData()
    Dim strName1 As String, strName2 As String
    Dim dTimeStamp As Date
    Dim sItem1 As Single, sItem2 As Single, sItem3 As Single
    Dim sItem4 As Single
    Dim ws_1 As Worksheet, ws_2 As Worksheet
    Set ws_1 = Sheets("Data")
    Set ws_2 = Sheets("Output")


    strName1 = ws_1.Range("D1").MergeArea.Cells(1, 1).Value
    strName1 = Left(strName1, Len(strName1) - 6)
    strName2 = ws_1.Range("B17")
    dTimestamp = Now
    sItem1 = ws_1.Range("D3")
    sItem2 = ws_1.Range("E3")
    sItem3 = ws_1.Range("F3")
    sItem4 = ws_1.Range("N3")

    Dim loTable As ListObject
    Set loTable = ws_2.ListObjects("CurrentMkts")

    Dim iLastRow As Integer
    iLastRow = loTable.Range.Rows.Count
    If iLastRow = 2 Then
    Dim iTempRow As Integer
        iTempRow = iLastRow - 1
        loTable.DataBodyRange.Cells(iTempRow, 1).Value = dTimeStamp
        loTable.DataBodyRange.Cells(iTempRow, 2).Value = sItem1
        loTable.DataBodyRange.Cells(iTempRow, 3).Value = sItem2
        loTable.DataBodyRange.Cells(iTempRow, 4).Value = sItem3
        loTable.DataBodyRange.Cells(iTempRow, 6).Value = sItem4
        loTable.ListRows.Add
    Else
        iTempRow = iLastRow
        loTable.DataBodyRange.Cells(iTempRow, 1).Value = dTimeStamp
        loTable.DataBodyRange.Cells(iTempRow, 2).Value = sItem1
        loTable.DataBodyRange.Cells(iTempRow, 3).Value = sItem2
        loTable.DataBodyRange.Cells(iTempRow, 4).Value = sItem3
        loTable.DataBodyRange.Cells(iTempRow, 6).Value = sItem4
        loTable.ListRows.Add
    End If
End Sub

感谢您的帮助。

1
代码在哪一行出错了? - Scott Holtzman
If语句中的第三行 - loTable.DataBodyRange.Cells(iTempRow, 1).Value = dTimeStamp - fmc100
4
这是因为Excel处理空的ListObjects的方式似乎是没有意义的。将loTable.ListRows.Add移动到设置单元格值之前的那一行。由于某种原因,如果ListObject为空,Excel认为它没有DataBodyRange。如果有实际数据行,则“IF”块的第二部分不需要将loTable.ListRows.Add移到顶部。 - Scott Holtzman
1
那个有效。那似乎是答案。谢谢。如果您能更详细地解释一下错误或像我这样的非编程人员如何最好地自己找到答案,我会很感激。 - fmc100
@fmc100 - 我已经编程超过20年了,但在过去的一年中我刚刚遇到了这个问题。我是通过遇到它然后谷歌搜索才发现的 :) 所以,我的观点是,你找到并解决它的方式可能是唯一的方式。这种情况在任何地方都没有正式记录(据我所知)。 - Scott Holtzman
显示剩余2条评论
1个回答

3
错误是由于在Excel中处理空白ListObjects的方式似乎不合理。基本上,在这种情况下,因为ListObject中没有数据,所以Excel将DataBodyRange属性视为不存在,因此当您尝试设置DataBodyRange单元格的值时,代码会出错。
要修复它,请将loTable.ListRows.Add移动到设置单元格值之前的行,放在IF块的第一部分。
IF块的第二部分不需要将loTable.ListRows.Add移动到顶部,因为实际的数据行将存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接