VBA Excel:使用字母数字范围与单元格跨表格复制

时间:2013-10-28 04:09:33

标签: excel vba excel-vba

有点奇怪的标题,我会解释我在问什么。

使用.Range("A1:B2").copy与使用.Range(Cells(1, 1), Cells(2, 2)).copy

当我在实际工作表上时,两者都可以,但。如果在调用宏时我在不同的工作表上,那么只有字母数字范围可以工作。

有问题的实际代码:

CurrentExtractSheet.Range("A2: AR" & (CurrentExtractCount + 1)).Copy
PreviousExtractSheet.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

VS

CurrentExtractSheet.Range(Cells(2, 1), Cells(CurrentExtractCount + 1, 45)).Copy
PreviousExtractSheet.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

所以我要问的是有什么方法可以解决这个问题(我更喜欢使用Cells方法而不是字母数字范围)? Cells是否需要首先使用活动表(我也不特别喜欢)?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您不需要将CurrentExtractSheet设置为ActiveSheet,但您需要将其与Cells命令一起包含在内......

CurrentExtractSheet.Range(CurrentExtractSheet.Cells(2, 1), CurrentExtractSheet.Cells(CurrentExtractCount + 1, 45)).Copy

With CurrentExtractSheet
 .Range(.Cells(2, 1),.Cells(CurrentExtractCount + 1, 45)).Copy
End With

答案 1 :(得分:3)

在没有指定工作表的情况下执行Cells(x,y)时,您实际上是在参考活动表。

因此,CurrentExtractSheet.Range(Cells(2, 1), Cells(CurrentExtractCount + 1, 45))相当于CurrentExtractSheet.Range(Activesheet.Cells(2, 1), Activesheet.Cells(CurrentExtractCount + 1, 45))

CurrentExtractSheet不是活动表时,它会失败。

有几种方法可以避免此错误

With CurrentExtractSheet
    Range(.Cells(2, 1), .Cells(CurrentExtractCount + 1, 45)) ...
End With

注意,当您为两个.Cells引用指定工作表时,您不需要质量Range

另一个otpion

CurrentExtractSheet.Cells(2, 1).Resize(CurrentExtractCount, 45) ...