2014-02-06 307 views
3

我想选择多个动态范围。尝试使用联合方法,并得到第一个Set行的'对象'全局失败错误的方法'范围'。Excel VBA选择多个动态范围

Dim LR As Long 
LR = Range("A60000").End(xlUp).Row 

Dim R1, R2, R3, R4, R5, MultiRange As Range 
Set R1 = Range("A7,:A" & LR) 
Set R2 = Range("D7,:D" & LR) 
Set R3 = Range("G7,:G" & LR) 
Set R4 = Range("H7,:H" & LR) 
Set R5 = Range("J7,:J" & LR) 
Set MultiRange = Union(R1, R2, R3, R4, R5) 
MultiRange.Select 
Selection.Copy 

任何人都可以帮忙吗?

谢谢

回答

3

由于范围语句中逗号的问题发生。即当您设置R1你应该写:

Set R1 = Range("A7:A" & LR) 

此外,当你定义变量的对象类型R1,...,R5你应该把它写成

Dim R1 As Range, R2 As Range, R3 As Range, R4 As Range, R5 As Range, MultiRange As Range 

否则R1,.. 。,R5将被定义为变体。这不会导致问题,但它会节省内存并使代码更清晰。

+0

啊新秀的错误。谢谢索伦。 –

+0

加上一个适当的方式来声明变量。 – L42

1

您还可以设置它像这样:

Set R1 = Range("A7","A" & LR) 

你所做的是你还挺混合起来的范围语法。
见下面一些常见的范围语法:

使用:定义Range

Range("A1:A" & LR) '~~> where LR holds the last row number 

使用,定义Range

Range("A1","A" & LR) 

使用Cells正确TY:

Range(Cells(1, "A"),Cells(LR, "A")) 
Range(Cells(1, 1),Cells(LR, 1)) '~~> another way 

使用Range属性:

Range(Range("A1"),Range("A" & LR)) 
Range(Range("A1").address & ":" & Range("A" & LR).Address) '~~> yet another complicated way 

所有语法上面的计算结果为:$A$1:$A$(LR)
每个人都有一定的优势和用途。
使用您最喜欢的语法。

附加:

这一次使用Intersect Function

Set R1 = Intersect(Columns("A:A"),Rows("1:" & LR))