表格之间的区别()。范围()和表格()。列
为什么我可以使用:
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
时才需要引用该工作表。