尝试访问工作表范围时出现VBA运行时错误1004
我正在构建一个小型vba脚本,该脚本将多个工作簿中的表合并到另一个工作簿的单个工作表中。尝试设置目标范围的值时引发错误:尝试访问工作表范围时出现VBA运行时错误1004,vba,excel,range,runtime-error,Vba,Excel,Range,Runtime Error,我正在构建一个小型vba脚本,该脚本将多个工作簿中的表合并到另一个工作簿的单个工作表中。尝试设置目标范围的值时引发错误: wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _ tbl.Range.Value 错误:“运行时错误“1004”:应用程序定义的错误或对象定义的错误” 我也问过类似的问题,一般的答案是:所选
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value
错误:“运行时错误“1004”:应用程序定义的错误或对象定义的错误”
我也问过类似的问题,一般的答案是:所选单元格属于所需工作表以外的其他工作表
虽然这完全有道理,但我仍然不明白为什么我的代码会中断,因为我只使用了数字引用(CurrentRow
是一个长的)和Resize
,这应该可以防止我犯这样的错误
此外,我在即时窗口中运行了几个快速测试,结果表明,虽然工作表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
当使用范围(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))
(使用Range()
和Cells()
时,您需要明确告诉Excel您要参考的工作表
最后,为了调整大小,如果我没记错的话,您必须在您的范围内添加两次相同的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
成功!!我误解了Range()的参数。谢谢!!请特别注意使用
wksPivotData.Range(单元格(1,1)、单元格(1,2))
或其他什么。注意我没有使用wksPivotData.Cells()
。这可能(不一定会)原因问题,因为您没有指定要使用哪个工作表的单元格。这就是为什么我更喜欢经常使用和
,即使它占用两行额外的行,我知道.cells()
也可以……这有意义吗?是的。这是我从其他相关问题中理解的。