为什么我可以使用:
Sheets("SKU Opt").Columns("D:D").Copy
来自任何工作表,但我只能使用:
Sheets("SKU Opt").Range(Range("D2"), Range("D2").End(xlDown)).Copy
来自' SKU Opt'片
我得到了一个"应用程序定义或对象定义的错误"当我尝试从除了“SKU Opt”之外的任何工作表中运行第二个。片材。
答案 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
时才需要引用工作表。