尝试访问工作表范围时VBA运行时错误1004
我正在构build一个小的vba脚本,它将多个工作簿中的表合并到另一个工作簿的单个工作表中。 当我尝试设置目标范围的值时,会引发错误:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _ tbl.Range.Value
错误:“运行时错误”1004“:应用程序定义或对象定义的错误”
我经历了类似的问题,一般的答案是我在这一个中find的:所选单元格属于另一个工作表,而不是所需的单元格。
虽然这是完全有道理的,但我仍然无法确定为什么我的代码中断,因为我只使用数字引用( CurrentRow
是一个Long)和Resize
,这应该阻止我做这样的错误。
另外,我在Immediate窗口中运行了几个快速testing,结果发现工作表wksPivotData
存在,而我可以访问它的名字和单元格值,范围函数根本不起作用:
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
由于您使用多个工作表,我会使用上面的with
语句。 wksPivotData.Range(wksPivotData.Cells(1,1),wksPivotData.Cells(1,1))
(你需要明确地告诉Excel使用Range()
时要引用的表格和cells()
。
最后,为了resize,如果我记得正确的话,你将不得不在你的范围内添加相同的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