复制范围而不激活工作表

时间:2016-07-26 18:02:01

标签: excel-vba vba excel

我在理解如何复制范围而不激活范围所在的工作表时遇到了一些麻烦。

此代码有效:

With Sheet6
  .Range("A1", .Cells(.Cells(Rows.Count, "B").End(xlUp).Row, "P")).Copy
End With

但以下所有行都不起作用:

Sheets(6).Range("A1", Cells(Cells(Rows.Count, "B").End(xlUp).Row, "P")).Copy
Sheet6.Range("A1", Cells(Cells(Rows.Count, "B").End(xlUp).Row, "P")).Copy

Sheets(6).Range("A1", .Cells(.Cells(Rows.Count, "B").End(xlUp).Row, "P")).Copy
Sheet6.Range("A1", .Cells(.Cells(Rows.Count, "B").End(xlUp).Row, "P")).Copy

我可能在这里遗漏了一些简单的东西,但似乎有很多不必要的代码可以使用With进行一次操作。

1 个答案:

答案 0 :(得分:1)

从A1到P&的范围有点奇怪。 [B栏的最后一行]。您可以通过查找B列中的最后一个单元格然后将范围偏移到A列然后将其向上和向右扩展到P1来完成此操作。语法有点奇怪。

With Sheet6

  .Range(.Cells(Rows.Count, "B").End(xlUp).Offset(0, -1), "P1").Copy Destination:=Sheet1.Range("A1")

End With

通过将变量(lastRow)赋值给= B列中的最后一行,并将范围从A1扩展到P& lastrow,代码变得更容易理解。

Dim lastRow As Long

With Sheet6

    lastRow = .Cells(Rows.Count, "B").End(xlUp).Row

    .Range("A1:P" & lastRow).Copy Destination:=Sheet1.Range("A1")

End With