为什么可以使用:差范围(和表()柱
Sheets("SKU Opt").Columns("D:D").Copy
从任何片,但是我只可以使用:
Sheets("SKU Opt").Range(Range("D2"), Range("D2").End(xlDown)).Copy
从' SKU Opt'表单?
当我尝试运行除“SKU Opt”表单之外的任何表单中的第二个表单时,出现“应用程序定义的错误或对象定义的错误”。
为什么可以使用:差范围(和表()柱
Sheets("SKU Opt").Columns("D:D").Copy
从任何片,但是我只可以使用:
Sheets("SKU Opt").Range(Range("D2"), Range("D2").End(xlDown)).Copy
从' SKU Opt'表单?
当我尝试运行除“SKU Opt”表单之外的任何表单中的第二个表单时,出现“应用程序定义的错误或对象定义的错误”。
您需要在与多个工作努力改变这种以
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
@ScottCraner - 哈哈,是的,当我看到你的评论出现时,我正在输入我的答案。不打算带走您的答案:P – BruceWayne
非常感谢!我一直在努力学习如何在没有选择vba代码的情况下进行选择。它使我的代码变得更加清晰,但也让这样的事情变得更加混乱。感谢您的帮助!对此,我真的非常感激! –
@CollinC。 “我一直在努力学习如何在不使用vba代码的情况下。选择...”,**是的,**这就是我喜欢听到的!它会为你做很多好事。我建议做一些“标准”的excel事情,并用宏录像机记录下来。然后,检查代码并尝试删除* all *'.Select'(基本上,你只需将两行以'.Select'结尾并以'Selection.'开头。此外,这里有一个[nice SO thread](http ://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)避免'.Select'。你的作业是通读:P – BruceWayne
我个人喜欢使用以下格式在我的代码的顶部。可能有多个工作簿在同一个Excel实例(应用程序)中打开。使用相同的工作表名称,因此您想要指定工作簿以更安全。
这也有让您的代码更容易阅读的额外好处!
Dim sheet as Worksheet
set sheet = ThisWorkbook.Worksheets("SKU Opt")
sheet.Range(sheet.Range("D2"), sheet.Range("D2").End(xlDown)).Copy
替代方法是使用'With'语句,而不是声明图纸变量然后使用它。 'With'告诉代码,任何来源不明的引用。即:'With Sheets(1)'后面跟着一行说'.Range(“D2”)。Formula =“Foobar”'的行后面跟着结尾'End With'。请注意,你仍然需要一个“。”在Range的前面,表明你正在引用“With”语句中的一个项目。 –
只是一个注释 - 我个人建议不要使用'Sheet'(也是'Cell')作为工作表的变量名称。这是因为它非常接近受保护的单词“表格”,并可能导致一些混淆。也许可以使用'mainWS'或其他一些东西,这些描述更具描述性,你可以一目了然地看到你正在使用的工作表,而不是一个通用的单词,而这个单词并不真正。 – BruceWayne
这个方法也能真正帮助我。我要投入蝙蝠侠的改进并开始使用它。谢谢! –
上其他的答案另一种变化:
Dim firstCell, lastCell As Range
Set firstCell = Sheets("SKU Opt").Range("D2")
Set lastCell = firstCell.End(xlDown)
Range(firstCell, lastCell).Copy
注意lastCell
从firstCell
和片材仅需要设置firstCell
时要参考的。
问题是'Range(“D2”)'是不合格的,并且默认为活动工作表。你需要用......和'.Range(“D2”)',正如BruceWayne所指出的那样。 –