Excel 运行时错误';91';将表格Listobject单元格设置为工作表值时

Excel 运行时错误';91';将表格Listobject单元格设置为工作表值时,excel,listobject,vba,Excel,Listobject,Vba,我试图创建一个子系统,将工作表中的各种值存储在变量中,然后将变量复制到listobject(表)中空行的相应列中。我继续得到以下错误: “运行时错误'91': 对象变量或未设置块变量“ 我尝试过很多变化,但不断出现错误,有时甚至是不同的错误。任何建议都将不胜感激。这是密码 Sub RecordData() Dim strName1 As String, strName2 As String Dim dTimeStamp As Date Dim sItem1 As Sing

我试图创建一个子系统,将工作表中的各种值存储在变量中,然后将变量复制到listobject(表)中空行的相应列中。我继续得到以下错误:

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

我尝试过很多变化,但不断出现错误,有时甚至是不同的错误。任何建议都将不胜感激。这是密码

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

感谢您的帮助。

出现此错误的原因是Excel中处理空白列表对象的方式似乎不合理

本质上,在这种情况下,由于ListObject中没有数据,Excel会将
DataBodyRange
属性视为不存在,因此当您尝试设置
DataBodyRange
的单元格值时,会出现代码错误

要修复此问题,请在
IF
块的第一部分中,将
loTable.ListRows.Add
移动到行中,然后再设置单元格值


IF块的第二部分不需要将loTable.ListRows.Add移到顶部,因为实际的数据行将出现。

代码在哪一行出错?IF语句的第三行-loTable.dataodyrange.Cells(iTempRow,1)。Value=dtimestampt这是由于Excel中处理空白列表对象的方式似乎不合理。移动
loTable.ListRows。在设置单元格值之前,将
添加到行中。出于某种原因,如果listobject为空,excel会将其视为没有DataCodeRange。
IF
块的第二部分不需要将
loTable.ListRows.Add
移到顶部,因为实际的数据行将出现。这样就行了。这似乎是答案。非常感谢。如果你能再多解释一点错误,或者像我这样的非编码人员如何能最好地自己找到答案,我将不胜感激。@ScottHoltzman OP是对的,也许可以把它作为答案再加上一点解释:)直到现在才知道这一点。