为什么可以使用:
Sheets("SKU Opt").Columns("D:D").Copy
来自任何纸张,但我只能使用:
Sheets("SKU Opt").Range(Range("D2"), Range("D2").End(xlDown)).Copy
从"SKU选项"表?
当我试图从"SKU选择"表之外的任何表中运行第二个时,我会收到"应用程序定义或对象定义错误"。
您需要将其更改为
Sheets("SKU Opt").Range(Sheets("SKU Opt").Range("D2"), Sheets("SKU Opt").Range("D2").End(xlDown)).Copy
使用多个工作表时,应始终对正在使用的工作表进行限定。正如你所看到的,如果你不这样做,就有可能出现错误。正如你所看到的,它在"SKU Opt"页面上寻找一个范围,但什么范围并不完全清楚。如果不指定,Range()
集将来自活动图纸。当活动工作表不同于"SKU选择"时,它很可能会抛出错误。
另一种选择是使用With
:
With Sheets("SKU Opt")
.Range(.Range("D2"),.Range("D2").End(xlDown)).Copy
End With
就我个人而言,我喜欢在代码顶部使用以下格式。可能在同一个excel实例(应用程序)中打开了多个工作簿。具有相同的工作表名称,因此您还希望指定工作簿以更加安全。
这还有一个额外的好处,那就是让你的代码更容易阅读!
Dim sheet as Worksheet
set sheet = ThisWorkbook.Worksheets("SKU Opt")
sheet.Range(sheet.Range("D2"), sheet.Range("D2").End(xlDown)).Copy
其他答案的另一个变体:
Dim firstCell, lastCell As Range
Set firstCell = Sheets("SKU Opt").Range("D2")
Set lastCell = firstCell.End(xlDown)
Range(firstCell, lastCell).Copy
请注意,lastCell
是从firstCell
派生而来的,并且在设置firstCell
时只需要参照图纸。