从返回函数中分配Range数组

时间:2014-01-06 03:06:04

标签: arrays vba

我希望有一系列范围来创建图表。

以下是我的方式:

Dim infoR As Range
Dim aRng() As Range
Dim numLvls As Integer

Set infoR = Range("H1:H100");

numLvls = getLevels()

Set aRng() = getOnlyNumericCellToArrayRanges(infoR, numLvls)

功能如下:

Function getOnlyNumericCellsRangesArrays(ByVal actRange As Range, ByVal numLvls As Integer) As Range()

    Dim aRng() As Range
    Redim aRng(0 To numLvls - 1)

    'Some code

    Set getOnlyNumericCellToArrayRanges = aRng()

End Function

我在互联网上看过几个数组示例,他们使用variant作为数据类型,但它也没有像那样编译。

我发现它有一些变化:

Dim aRng

'Some code

aRng = getOnlyNumericCellToArrayRanges(infoR)

我认为通过引用传递数组可能有效,但是我想知道是否有一种方法可以从一开始就明确地对数组声明和Range数据类型进行分配。

或者我如何将结果数组转换回Range数组?

1 个答案:

答案 0 :(得分:0)

数组不是对象(即使它是一个对象数组),所以这里不需要Set ...

Sub Tester()

    Dim arrRng() As Range, x As Long

    arrRng = GetRangeArray()
    For x = LBound(arrRng) To UBound(arrRng)
        Debug.Print arrRng(x).Address()
    Next x

End Sub


Function GetRangeArray() As Range()

    Dim arrRng() As Range

    ReDim arrRng(1 To 3)
    Set arrRng(1) = ActiveSheet.Range("A1")
    Set arrRng(2) = ActiveSheet.Range("A3")
    Set arrRng(3) = ActiveSheet.Range("A5")

    GetRangeArray = arrRng
End Function