Sheets().Range()和Sheets(().Column之间的差异



为什么可以使用:

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时只需要参照图纸。

最新更新