VBA 尝试访问范围 sheet 时出现运行时错误 1004
VBA Runtime error 1004 when trying to access range of sheet
我正在构建一个小的 vba 脚本,用于将多个工作簿中的表格合并到另一个工作簿的一个工作表中。当我尝试设置目的地 运行ge 的值时出现错误:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value
错误:"Run-time error '1004': Application-Defined or object-defined error"
我经历了类似的问题,一般答案是我在 中找到的:所选单元格属于另一个工作表而不是所需的工作表。
虽然这完全有道理,但我仍然无法理解为什么我的代码会中断,因为我只使用数字引用(CurrentRow
是一个 Long)和 Resize
,这应该会阻止我从犯这样的错误。
此外,我 运行 在即时 window 中进行了一些快速测试,结果表明虽然工作表 wksPivotData
存在并且我可以访问它的名称和单元格值, 运行ge 函数根本不起作用:
Debug.Print wksPivotData.Name
PivotData
Debug.Print wksPivotData.Cells(1, 1).Value
123
这两个都有效,但下一个无效:
Debug.Print wksPivotData.Range(1, 1).Value
你的最后一行 Debug.Print wksPivotData.Range(1, 1).Value
不会打印,因为你误用了 Range()
。我假设你想要A1?
当使用 Range(1,1)
时,您指的是一个不存在的范围。如果你想做A1单元格,你需要
With wksPivotData
myData = .Range(.Cells(1,1),.Cells(1,1)).Value
End with
由于您使用的是多个作品sheet,我将使用上面的 with
语句。另一种写法是 wksPivotData.Range(wksPivotData.Cells(1,1),wksPivotData.Cells(1,1))
(在使用 Range()
和 cells()
时,你需要明确地告诉 Excel 你想指代什么 sheet。
最后,为了调整大小,如果我没记错的话,您将不得不在范围内添加相同的 Cell()
两次:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1),ksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value
或者,对于同样的事情,但做事的方式不同:
With wksPivotData
.Range(.Cells(currentRow, 1), .Cells(currentRow, 1)).Resize(tbl.ListedRows.Count, tbl.ListColumns.Count).Value = tbl.Range.Value
End With
我正在构建一个小的 vba 脚本,用于将多个工作簿中的表格合并到另一个工作簿的一个工作表中。当我尝试设置目的地 运行ge 的值时出现错误:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value
错误:"Run-time error '1004': Application-Defined or object-defined error"
我经历了类似的问题,一般答案是我在
虽然这完全有道理,但我仍然无法理解为什么我的代码会中断,因为我只使用数字引用(CurrentRow
是一个 Long)和 Resize
,这应该会阻止我从犯这样的错误。
此外,我 运行 在即时 window 中进行了一些快速测试,结果表明虽然工作表 wksPivotData
存在并且我可以访问它的名称和单元格值, 运行ge 函数根本不起作用:
Debug.Print wksPivotData.Name
PivotData
Debug.Print wksPivotData.Cells(1, 1).Value
123
这两个都有效,但下一个无效:
Debug.Print wksPivotData.Range(1, 1).Value
你的最后一行 Debug.Print wksPivotData.Range(1, 1).Value
不会打印,因为你误用了 Range()
。我假设你想要A1?
当使用 Range(1,1)
时,您指的是一个不存在的范围。如果你想做A1单元格,你需要
With wksPivotData
myData = .Range(.Cells(1,1),.Cells(1,1)).Value
End with
由于您使用的是多个作品sheet,我将使用上面的 with
语句。另一种写法是 wksPivotData.Range(wksPivotData.Cells(1,1),wksPivotData.Cells(1,1))
(在使用 Range()
和 cells()
时,你需要明确地告诉 Excel 你想指代什么 sheet。
最后,为了调整大小,如果我没记错的话,您将不得不在范围内添加相同的 Cell()
两次:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1),ksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value
或者,对于同样的事情,但做事的方式不同:
With wksPivotData
.Range(.Cells(currentRow, 1), .Cells(currentRow, 1)).Resize(tbl.ListedRows.Count, tbl.ListColumns.Count).Value = tbl.Range.Value
End With