1
我想我有一个相当不错的句柄来处理如何通过Property Get和Let来处理VBA中的模块级数组。有没有办法通过属性ReDim模块级别的数组?我可以使用属性ReDim模块级别数组吗?
在上次过程(DoTest)中的ReDim语句处出现以下代码错误。
Private mstrTestArray() As String
Private Sub Class_Initialize()
ReDim mstrTestArray(0) As String
End Sub
Private Property Get TestArray() As String()
TestArray = mstrTestArray
End Property
Private Property Let TestArray(ByRef strTestArray() As String)
mstrTestArray = strTestArray
End Property
Private Property Get TestArrayValue(d1 As Long) As String
TestArrayValue = mstrTestArray(d1)
End Property
Private Property Let TestArrayValue(d1 As Long, strValue As String)
mstrTestArray(d1) = strValue
End Property
Sub DoTest()
Dim intCharCode As Integer
For intCharCode = 97 To 122
If Not Len(TestArrayValue(UBound(TestArray))) > 0 Then
TestArrayValue(UBound(TestArray)) = Chr(intCharCode)
Else
ReDim Preserve TestArray(UBound(TestArray) + 1) As String
TestArrayValue(UBound(TestArray)) = Chr(intCharCode)
End If
Next intCharCode
Debug.Print TestArrayValue(LBound(TestArray)) _
& " through " _
& TestArrayValue(UBound(TestArray))
End Sub
谢谢!
本,这是非常有帮助的。我没有'ReDim mstrTestArray',因为我认为使用属性而不是实际的模块级变量会更“最佳实践”。但是我认为你是对的,ReDim没有办法通过引用返回数组。我猜想另一种方法是在DoTest中使用本地数组变量,并在DoTest结束时设置TestArray = strTestArray,即使它的实时性稍差。谢谢! – Kuyenda 2010-02-03 20:02:49
我绝不是VBA专家,但是我没有看到使用类*中的*私有变量'mstrTestArray'来改变它的值有什么问题。我认为如果有人正在使用你的对象,并且对'mstrTestArray'在类内部发生了变异感到困惑,它可能*会引起混淆。如果你要在VBA中做很多工作,可以考虑获得** VBA Developer's Handbook **:http://www.amazon.com/VBA-Developers-Handbook-Ken-Getz/dp/0782119514 – 2010-02-03 20:38:25
这本书是否真的涵盖了这个东西?我从来没有找到像这样彻底的书:http://www.cpearson.com/excel/mainpage.aspx。再次感谢Ben! – Kuyenda 2010-02-04 14:59:13