2016-07-26 40 views
0

我在理解如何复制范围而不激活工作表所在的工作表时遇到了一些问题。在不激活工作表的情况下复制范围

此代码:

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一个动作。

+5

在第一个你分配表血统的'细胞(..)''的范围(内...'用'.'在前面。在别人对你已经删除了这一点。如果你真的想要长时间的工作,那么你需要在每个单元格的前面放置'Sheet6.'(' –

+1

为了使用'.'符号(最后两次尝试),你还需要使用'With'块(如你的*工作*例子)前两个努力失败的原因@ScottCraner表示。 –

+0

感谢清除,我终于开始了解'.'如何在代码中工作如果你想转它会变成一个答案,我会接受它 – tjb1

回答

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 
+0

我不知道如何使用'Destination',以便清除更多的代码,谢谢!我还发现B列的最后一行,因为那个co lumn总是有一个值,但是我们获取数据的方式,列A可能并不总是有值,但稍后需要,因此它也被复制。 – tjb1

+0

Ron de Bruin的这个功能更适合寻找最后一行/列/单元格。更可靠。 http://www.rondebruin.nl/win/s9/win005.htm –

相关问题