我正在尝试创建一个子程序,它可以将工作表中的各种值存储在变量中,然后将变量复制到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谢谢你的帮助。
发布于 2018-01-12 15:14:53
错误发生的原因是,在Excel中处理空白ListObjects的方式似乎是不合理的.
在这种情况下,由于ListObject中没有数据,所以Excel将DataBodyRange属性视为不存在,因此当您试图设置DataBodyRange单元格的值时,会出现代码错误。
要修复它,请在设置单元格值之前,在loTable.ListRows.Add块的第一部分中将IF移动到行中。
IF块的第二部分不需要将loTable.ListRows.Add移到顶部,因为实际的数据行将出现。
https://stackoverflow.com/questions/48216970
复制相似问题