使用VBA将数据从一张纸复制到另一张纸时出错

时间:2020-01-17 07:55:50

标签: excel vba

将数据从Sheet1复制到Sheet2

“运行时错误'1004':应用程序定义或对象定义的错误”

我正在使用vba代码:

lnRow = 33
Sheets("Sheet1").Range("A3:C14").Copy Destination:=Sheets("Sheet2").Range(Cells(lnRow + 3, 1))

如何使用Sheet1数字将数据从Sheet2复制到column

2 个答案:

答案 0 :(得分:2)

实际上有问题的部分是Sheets("Sheet2").Range(Cells(lnRow + 3, 1)),它有2个问题。

1。问题

对于Cells对象,没有在哪个工作表中指定,因此VBA假定为ActiveSheet。与写Sheets("Sheet2").Range(ActiveSheet.Cells(lnRow + 3, 1))相同。

现在,如果活动工作表不是不是 Sheet2,则代码将失败,因为Range对象与Cells对象不在同一工作表中,那是不允许的。

2。问题

根据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而不使用RangeCells(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")