Excel 运行时错误';91';将表格Listobject单元格设置为工作表值时
我试图创建一个子系统,将工作表中的各种值存储在变量中,然后将变量复制到listobject(表)中空行的相应列中。我继续得到以下错误: “运行时错误'91': 对象变量或未设置块变量“ 我尝试过很多变化,但不断出现错误,有时甚至是不同的错误。任何建议都将不胜感激。这是密码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
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是对的,也许可以把它作为答案再加上一点解释:)直到现在才知道这一点。