Excel VBA选择多个动态范围

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)

Net*_*loh 5

发生问题的原因是您的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。这不会造成问题,但是可以节省内存,并使代码更简洁。

  • 再加上一个用于声明变量的正确方法。 (2认同)

L42*_*L42 5

你也可以这样设置:

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)