debugging。 将可变数量的单元格复制到一个工作表中并粘贴到另一个工作表中

代码的目标是将Sheet2中的多个行和三列单元格复制到Sheet1中的最后一个空行。 我试图使用范围内的单元格属性来复制,但是这一行给我一个运行时错误“1004”(应用程序定义或对象定义的错误)。

这怎么解决?

Private Sub CommandButton1_Click() Dim sum As Integer n = 7 Sheets("Sheet2").Range(Cells(11, 15), Cells((11 + n), 18)).Copy With Sheets("Sheet1").Range("A500").End(xlUp).Offset(1, 0) .PasteSpecial xlPasteFormats .PasteSpecial xlPasteValues End With End Sub 

当Range对象作为parameter passing给Range属性时,经常会把人抓住的问题是,如果你需要指定一个工作表对象(这是一个好习惯),你需要为所有的Range / Cells属性指定它使用。

(来源/更多阅读: http : //excelmatters.com/referring-to-ranges-in-vba/ )

你可以使用:

 With Sheets("Sheet2") .Range(.Cells(11, 15), .Cells((11 + n), 18)).Copy End With 

要么:

 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(11, 15), Sheets("Sheet2").Cells((11 + n), 18)).Copy 

代替:

 Sheets("Sheet2").Range(Cells(11, 15), Cells((11 + n), 18)).Copy 

或者你可以build立这样的范围:

 Sheets("Sheet2").Range("O11:R" & (11 + n)).Copy 

编辑的代码:

 Private Sub CommandButton1_Click() Dim sum As Integer n = 7 Sheets("Sheet2").Range("O11:R" & (11 + n)).Copy 'Edited Line With Sheets("Sheet1").Range("A500").End(xlUp).Offset(1, 0) .PasteSpecial xlPasteFormats .PasteSpecial xlPasteValues End With End Sub