Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试访问工作表范围时出现VBA运行时错误1004_Vba_Excel_Range_Runtime Error - Fatal编程技术网

尝试访问工作表范围时出现VBA运行时错误1004

尝试访问工作表范围时出现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”:应用程序定义的错误或对象定义的错误” 我也问过类似的问题,一般的答案是:所选

我正在构建一个小型vba脚本,该脚本将多个工作簿中的表合并到另一个工作簿的单个工作表中。尝试设置目标范围的值时引发错误:

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()
也可以……这有意义吗?是的。这是我从其他相关问题中理解的。