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