将数据从Sheet1
复制到Sheet2
时
“运行时错误'1004':应用程序定义或对象定义的错误”
我正在使用vba代码:
lnRow = 33
Sheets("Sheet1").Range("A3:C14").Copy Destination:=Sheets("Sheet2").Range(Cells(lnRow + 3, 1))
如何使用Sheet1
数字将数据从Sheet2
复制到column
?
答案 0 :(得分:2)
实际上有问题的部分是Sheets("Sheet2").Range(Cells(lnRow + 3, 1))
,它有2个问题。
对于Cells
对象,没有在哪个工作表中指定,因此VBA假定为ActiveSheet
。与写Sheets("Sheet2").Range(ActiveSheet.Cells(lnRow + 3, 1))
相同。
现在,如果活动工作表不是不是 Sheet2
,则代码将失败,因为Range
对象与Cells
对象不在同一工作表中,那是不允许的。
根据Worksheet.Range property的文档,它接受2个参数Range(Cell1, Cell2)
,其中第二个是可选的,但仅当第一个是地址字符串时。
Cell1
- 一个字符串,当使用一个参数时,它是范围引用。
- 使用两个参数时,作为范围引用的 String 或 Range 对象。 < / li>
因此,您可以使用以下语法:
Range("Address")
Range("Address", "Address")
Range(Cells(row, column), Cells(row, column))
但是您不能使用
Range(Cells(row, column))
因为仅使用一个参数,所以它必须是字符串/地址。实际上,最后一个不存在,因为您可以直接使用Cells
而不使用Range
:Cells(row, column)
因此,在您的情况下,这意味着您必须直接使用Cells
:
Sheets("Sheet2").Cells(lnRow + 3, 1)
答案 1 :(得分:0)
如果要使用cells方法,则该错误是由于使用range(cells(3,1))
引起的。而是使用sheets("Sheet1").range(cells(3,1),cells(4,1))
。否则,您可以省略单元格并照常指定范围,例如range("C4:D5")
。