表格之间的区别()。范围()和表格()。列

为什么我可以使用:

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

从任何表,但我只能使用:

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

来自“SKUselect”表单?

当我尝试运行除“SKU Opt”表单之外的任何表单中的第二个表单时,出现“应用程序定义的错误或对象定义的错误”。

你需要改变它

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

在使用多个工作表时,应始终限定您正在使用的工作表。 正如你所看到的,当你不知道的时候,可能会出现错误。 正如你所见,它正在寻找一个范围的“SKUselect”页面,但什么范围不完全清楚。 没有指定, Range()集将来自活动工作表。 当活动工作表与“SKUselect”不同时,最有可能出现错误。

另一种方法是使用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时才需要引用该工作表。