range.copy Destination" A1" vs"细胞(1,1)" Excel中/ VBA

时间:2017-06-28 14:53:39

标签: excel-vba syntax copy-paste vba excel

考虑以下内容:

    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遇到“应用程序定义的或对象定义的错误”时会起作用?

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。