Hin*_*.Li 3 excel union vba dynamic 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
Run Code Online (Sandbox Code Playgroud)
发生问题的原因是您的range语句中的逗号。即,当您设置时,R1
您应该写:
Set R1 = Range("A7:A" & LR)
Run Code Online (Sandbox Code Playgroud)
另外,定义变量R1
... 的对象类型时,R5
应将其写为
Dim R1 As Range, R2 As Range, R3 As Range, R4 As Range, R5 As Range, MultiRange As Range
Run Code Online (Sandbox Code Playgroud)
否则R1
,... R5
将被定义为Variant。这不会造成问题,但是可以节省内存,并使代码更简洁。
你也可以这样设置:
Set R1 = Range("A7","A" & LR)
Run Code Online (Sandbox Code Playgroud)
你所做的是有点混淆了 Range 语法。
请参阅下面一些常见的范围语法:
使用:
来定义Range
:
Range("A1:A" & LR) '~~> where LR holds the last row number
Run Code Online (Sandbox Code Playgroud)
使用,
来定义Range
:
Range("A1","A" & LR)
Run Code Online (Sandbox Code Playgroud)
使用Cells
属性:
Range(Cells(1, "A"),Cells(LR, "A"))
Range(Cells(1, 1),Cells(LR, 1)) '~~> another way
Run Code Online (Sandbox Code Playgroud)
使用Range
属性:
Range(Range("A1"),Range("A" & LR))
Range(Range("A1").address & ":" & Range("A" & LR).Address) '~~> yet another complicated way
Run Code Online (Sandbox Code Playgroud)
上述所有语法的计算结果为:$A$1:$A$(LR)
每种语法都有一定的优点和用途。
使用您最熟悉的语法。
额外的:
这个使用Intersect Function
:
Set R1 = Intersect(Columns("A:A"),Rows("1:" & LR))
Run Code Online (Sandbox Code Playgroud)