尝试访问工作表范围时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