Sheets()。Range()和Sheets()之间的区别。列

时间:2015-11-19 17:37:38

标签: excel vba

为什么我可以使用:

Sheets("SKU Opt").Columns("D:D").Copy

来自任何工作表,但我只能使用:

Sheets("SKU Opt").Range(Range("D2"), Range("D2").End(xlDown)).Copy
来自' SKU Opt'片

我得到了一个"应用程序定义或对象定义的错误"当我尝试从除了“SKU Opt”之外的任何工作表中运行第二个。片材。

3 个答案:

答案 0 :(得分:2)

您需要将其更改为

Sheets("SKU Opt").Range(Sheets("SKU Opt").Range("D2"), Sheets("SKU Opt").Range("D2").End(xlDown)).Copy

使用多个工作表时,您应该始终限定您正在使用的工作表。如您所见,当您不这样做时,可能会出错。正如您所看到的,它正在寻找范围的“SKU选项”页面,但 范围并不完全清楚。如果不指定,Range()集将来自活动表。当活动表不同于“SKU选项”时,它最有可能发生错误。

另一种方法是使用With

With Sheets("SKU Opt")
   .Range(.Range("D2"),.Range("D2").End(xlDown)).Copy
End With

答案 1 :(得分:0)

我个人喜欢在我的代码顶部使用以下格式。可能在同一个excel实例(应用程序)中打开了多个工作簿。使用相同的工作表名称,因此您还要指定工作簿,以便更安全。

这还有一个额外的好处,就是让您的代码更容易阅读!

Dim sheet as Worksheet

set sheet = ThisWorkbook.Worksheets("SKU Opt")

sheet.Range(sheet.Range("D2"), sheet.Range("D2").End(xlDown)).Copy

答案 2 :(得分:0)

其他答案的另一个变体:

Dim firstCell, lastCell As Range
Set firstCell = Sheets("SKU Opt").Range("D2")
Set lastCell = firstCell.End(xlDown)
Range(firstCell, lastCell).Copy

请注意,lastCell来自firstCell,并且只有在设置firstCell时才需要引用工作表。