使用cells属性将范围从一个工作表复制到另一个工作表

Bob*_*get 3 excel vba copy paste excel-vba

我正在尝试将范围从一个工作表复制到另一个工作表.我有多个范围,我想在新工作表中的不同点复制和粘贴(例如,我想将第一个范围粘贴到D3,然后将下一个范围粘贴到E12,依此类推),所以我使用用于描述范围的单元格属性.但是,出于某种原因,当我使用单元格格式而不是仅仅放入字符串来描述我要在新工作表中粘贴的范围时,它不起作用.

这行代码确实有效:

Sheets("Sheet1").Range(Cells(2, 3), Cells(10, 3)).Copy _
  Destination:=Sheets("Sheet2").Range("D3")
Run Code Online (Sandbox Code Playgroud)

但这个没有:

Sheets("Sheet1").Range(Cells(2, 3), Cells(10, 3)).Copy _
  Destination:=Sheets("Sheet2").Range(Cells(3,4))
Run Code Online (Sandbox Code Playgroud)

当我运行后一行代码时,我得到"运行时错误1004:应用程序定义或对象定义错误".为什么这样,我该如何解决?

小智 7

您指定的是Range的父级而不是Cells的父级.简而言之,您尝试在Sheet1上定义一系列包含Sheet2上的单元格和/或反之亦然的单元格.

dim ws2 as worksheet
set ws2 = sheets("Sheet2")

with sheets("Sheet1")
    .Range(.Cells(2, 3), .Cells(10, 3)).Copy _
      Destination:=ws2.Range(ws2.Cells(3,4))
end with
Run Code Online (Sandbox Code Playgroud)

前缀句点(aka .句号)表示with的父节点.RangeWith ... End With语句.Cells定义.为了缩短在Sheet2上正确定义范围所需的代码,我分配了一个工作表类型变量,并用它来显示范围和单元格的父级.

FWIW,ws2.Range(ws2.Cells(3,4))是多余的.ws2.Cells(3,4)足够了.

  • 另一个在很长时间内有充分理由_never_使用隐式引用. (2认同)