VBA Excel无效的ReDim /预期数组与范围数组模块

我有一个模块,存储在其他模块中调用的Range对象的数组。 虽然这个模块是function性的,但它是马虎,我希望代码很容易阅读/编辑未来的开发人员。 理想情况下,这不仅易于阅读/编辑,而且还可以是范围数组(而不是变体数组)。

如何调用模块(理想情况下是“作为范围”):

Sub CallModule() '... Dim rangeArray As Variant '... rangeArray = RngArr() '... Call AnotherModule(rangeArray(count)) End Sub 

当前模块:

 Public Function RngArr() As Variant RngArr = Array(Range("'ActivityTracker'!B12"), Range("'ActivityTracker'!H12"), Range("'ActivityTracker'!B26"), Range("'ActivityTracker'!H26"), Range("'ActivityTracker'!B39"), Range("'ActivityTracker'!H39"), Range("'ActivityTracker'!B53")) End Function 

当我试图把它放在一起时,我遇到了一些错误,

返回“ 预期数组 ”:

  Public Function RngArr() As Range ReDim RngArr(0 To 6) '<---Expected Array Set RngArr(0) = Range("'ActivityTracker'!B12") Set RngArr(1) = Range("'ActivityTracker'!H12") Set RngArr(2) = Range("'ActivityTracker'!B26") Set RngArr(3) = Range("'ActivityTracker'!H26") Set RngArr(4) = Range("'ActivityTracker'!B39") Set RngArr(5) = Range("'ActivityTracker'!H39") Set RngArr(6) = Range("'ActivityTracker'!B53") End Function 

返回“ ReDim无效 ”:

 Public Function RngArr() As Variant ReDim RngArr(0 To 6) As Range '<---Invalid ReDim Set RngArr(0) = Range("'ActivityTracker'!B12") Set RngArr(1) = Range("'ActivityTracker'!H12") Set RngArr(2) = Range("'ActivityTracker'!B26") Set RngArr(3) = Range("'ActivityTracker'!H26") Set RngArr(4) = Range("'ActivityTracker'!B39") Set RngArr(5) = Range("'ActivityTracker'!H39") Set RngArr(6) = Range("'ActivityTracker'!B53") End Function 

我不太了解VBA,知道这些错误到底是怎么回事,而且我还有一些需要修复的模块。 所以,如果有人能够快速解释为什么我得到这些错误,以及如何解决这些错误,我会非常感激!

编辑:这个模块的目的是让工作表中的各个表的位置的全球访问,所以位置本身是什么事,而不是单元格中的值。 但是这个数组在工作簿中使用了几次,因为其他模块需要访问表以便能够正常工作。 另外我知道你可以直接引用这些表,但是在这个特定的程序中有许多情况会使得引用表比别人更难。

 Public Function RngArr() As Range() Dim rv(0 To 6) As Range Set rv(0) = Range("'ActivityTracker'!B12") Set rv(1) = Range("'ActivityTracker'!H12") Set rv(2) = Range("'ActivityTracker'!B26") Set rv(3) = Range("'ActivityTracker'!H26") Set rv(4) = Range("'ActivityTracker'!B39") Set rv(5) = Range("'ActivityTracker'!H39") Set rv(6) = Range("'ActivityTracker'!B53") RngArr = rv End Function Sub Tester() Debug.Print RngArr()(2).Address() End Sub 

目前还不清楚你在这里做什么。

下面的代码虽然工作:

 Public Function testArr() As Variant Dim newArr() As Range ReDim newArr(1 To 5) As Range Set newArr(1) = Sheets("Sheet1").Range("A1") testArr = newArr End Function Public Sub test() Dim myArr As Variant myArr = testArr() End Sub 

如果你这样做,myArr在返回时仍然是一个变体,而不是一个范围数组,但这似乎与你的意图相符。