我有一个模块,用于存储在其他模块中调用的Range对象数组。虽然这个模块很实用,但它很邋and,我希望这些代码能够为未来的开发人员轻松阅读/编辑。理想情况下,这不仅易于读取/编辑,而且还是范围数组(与变体数组相对)。
如何调用模块(理想情况下是'As Range'):
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以确切知道这些错误究竟发生了什么,我有许多需要修复的模块。因此,如果有人可以快速解释我为什么会收到这些错误以及如何修复它们,我会非常感激!
编辑:此模块的目的是为工作表中的各个表的位置提供全局访问权限,以便位置本身是重要的,而不是单元格中的值。但是这个数组在工作簿中使用了几次,因为其他模块需要访问表才能正常工作。我也知道你可以直接引用这些表,但是在这个特定的程序中有很多情况会使得单独引用表比它需要的更难。
答案 0 :(得分:4)
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
答案 1 :(得分:0)
目前尚不清楚你在这里要做什么。
以下代码有效:
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在返回时仍然是一个变体,如果你这样做的话,它不是一个范围数组,但这似乎符合你的意图。