在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”并告诉它继续,那么它工作得很好。
答案 0 :(得分:1)
在第二个示例中,您对Cells()的使用不合格,这可能会导致问题。
在这种情况下,Cells()引用在评估代码行的那一刻处于活动状态的工作表。
在这种情况下,您需要完全限定Cells()。
这应该这样做:
With Sheets("DataDump")
.Range(.Cells(startJobRow, 1), .Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1)
End With