有点奇怪的标题,我会解释我在问什么。
使用.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
是否需要首先使用活动表(我也不特别喜欢)?
提前致谢。
答案 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) ...