将包含多个范围的范围拆分为一个范围数组?
Split range containing multiple ranges into an array of ranges?
我正在尝试将多范围选择转换为范围数组。
现在这就是我正在尝试的:
Private Function SplitRange(ByRef r As Range) As Range()
Dim i As Long
Dim RangesArray() As Range
Dim AddressArray() As String
Dim Address As Variant
i = 0
AddressArray = Split(r.Address, ",")
ReDim RangesArray(UBound(AddressArray))
For Each Address In AddressArray
Set RangesArray(i) = Range(Address)
i = i + 1
Next Address
' It works till this point, executing RangesArray(0).Address returns a range address
SplitRange = RangesArray
' Here for some reason neither SplitRange(0).Address or RangesArray(0).Address work
End Function
如何将 "compound" 范围转换为范围数组?
每个 Range
类型的对象都有 属性 Areas
包含其子范围的集合。您可以对该集合中的项目进行操作,而不是创建数组。
但是如果你真的需要一个数组,你可以像这样轻松地转换它:
Public Function SplitRange(ByRef r As Range) As Range()
Dim i As Long
Dim ranges() As Range
Dim subrange As Range
'----------------------------------------------------------------
ReDim ranges(0 To r.Areas.Count - 1)
For Each subrange In r.Areas
Set ranges(i) = subrange
i = i + 1
Next subrange
SplitRange = ranges
End Function
我正在尝试将多范围选择转换为范围数组。
现在这就是我正在尝试的:
Private Function SplitRange(ByRef r As Range) As Range()
Dim i As Long
Dim RangesArray() As Range
Dim AddressArray() As String
Dim Address As Variant
i = 0
AddressArray = Split(r.Address, ",")
ReDim RangesArray(UBound(AddressArray))
For Each Address In AddressArray
Set RangesArray(i) = Range(Address)
i = i + 1
Next Address
' It works till this point, executing RangesArray(0).Address returns a range address
SplitRange = RangesArray
' Here for some reason neither SplitRange(0).Address or RangesArray(0).Address work
End Function
如何将 "compound" 范围转换为范围数组?
每个 Range
类型的对象都有 属性 Areas
包含其子范围的集合。您可以对该集合中的项目进行操作,而不是创建数组。
但是如果你真的需要一个数组,你可以像这样轻松地转换它:
Public Function SplitRange(ByRef r As Range) As Range()
Dim i As Long
Dim ranges() As Range
Dim subrange As Range
'----------------------------------------------------------------
ReDim ranges(0 To r.Areas.Count - 1)
For Each subrange In r.Areas
Set ranges(i) = subrange
i = i + 1
Next subrange
SplitRange = ranges
End Function