复制数据时尽量避免使用Sheet.Activate

时间:2015-09-07 00:36:04

标签: excel vba excel-vba

在Excel 2013上运行,我很难过。我试图避免必须激活工作表(更不用说多行代码)来复制数据。为什么会这样:

Sheets("DataDump").Activate
Range(Cells(startJobRow, 1), Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1)

但这不是:

Sheets("DataDump").Range(Cells(startJobRow, 1), Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1)

第二个代码给出了“运行时错误'1004':应用程序定义的错误或对象定义的错误”。如果我在调试模式下手动选择工作表“DataDump”并告诉它继续,那么它工作得很好。

1 个答案:

答案 0 :(得分:1)

在第二个示例中,您对Cells()的使用不合格,这可能会导致问题。

在这种情况下,Cells()引用在评估代码行的那一刻处于活动状态的工作表。

在这种情况下,您需要完全限定Cells()。

这应该这样做:

With Sheets("DataDump")
    .Range(.Cells(startJobRow, 1), .Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1)
End With