考虑以下内容:
Sheets("X").Activate
Sheets("X").Range(Cells(1, 1), Cells(1, 30)).Copy Destination:=Sheets("Y").Range("A1") 'Syntax 1
Sheets("X").Range(Cells(1, 1), Cells(1, 30)).Copy Destination:=Sheets("Y").Range(Cells(1, 1)) 'Syntax 2
为什么语法1在语法2遇到“应用程序定义的或对象定义的错误”时会起作用?
答案 0 :(得分:2)
您尚未对表格名称进行限定。因此,复制发生在ActiveSheet上,然后尝试从ActiveSheet引用Cell(1,1),但是在Y表上:
Sheets("Y").Range(Cells(1, 1))
表格(" Y")是表格Y. Cells(1,1)是ActiveSheet。
该副本仅有效,因为您首先激活表单X.删除该行,选择另一个工作表,它也将失败。
答案 1 :(得分:1)
不合格的Cells(1,1)
属于ActiveSheet,目前是Sheets(" X"),因此它不属于Sheets("Y")
。
OTOH:这应该有效:
Destination:=Sheets("Y").Range(Sheets("Y").Cells(1, 1), Sheets("Y").Cells(1, 1))
' ^^^^^^^^^^^^^
不要使用不合格的范围。从代码中完全删除Activate
stuf。