首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表列表对象单元格设置为工作表值时运行时错误“91”

将表列表对象单元格设置为工作表值时运行时错误“91”
EN

Stack Overflow用户
提问于 2018-01-11 22:40:55
回答 1查看 1.3K关注 0票数 3

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

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

我尝试过许多不同的方法,但是不断地出现错误,有时甚至是不同的错误。任何建议都是非常感谢的。这是密码

代码语言:javascript
复制
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

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 15:14:53

错误发生的原因是,在Excel中处理空白ListObjects的方式似乎是不合理的.

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

要修复它,请在设置单元格值之前,在loTable.ListRows.Add块的第一部分中将IF移动到行中。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48216970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档