Excel VBA选择多个动态范围

时间:2014-02-06 23:40:54

标签: excel-vba dynamic union range vba

我正在尝试选择多个动态范围。尝试使用union方法,我在第一个Set行上获得'object'全局失败错误的方法'Range'。

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

有人可以帮忙吗?

由于

2 个答案:

答案 0 :(得分: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将被定义为变体。这不会导致问题,但它会节省内存并使代码更清晰。

答案 1 :(得分:3)

您也可以这样设置:

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

你做的是你把Range语法混合起来 请参阅下面的一些常见范围语法:

使用:定义Range

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

使用,定义Range

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

使用Cells属性:

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))