试图避免在复制数据时使用Sheet.Activate

在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':应用程序定义或对象定义的错误”。 如果我在debugging模式下手动select工作表“DataDump”,并告诉它继续,那么它工作的很好。

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

在这种情况下,Cells()是在引用代码行的时候引用哪个表单处于活动状态。

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

这应该做到这一点:

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