Это хороший вопрос. Я отвечу на ваш вопрос прямо внизу, но давайте начнем с краткого фона объектно-ориентированного программирования в VBA. В большинстве объектно-ориентированных языков свойство будет часто выглядеть как поле , но действует как метод . Что это значит?
Когда вы создаете экземпляр класса и задаете значение для свойства, оно выглядит следующим образом:
Sub TestMyClass()
Dim mc As MyClass
Set mc = new MyClass
mc.MyProperty = 1
End Sub
В приведенном выше коде MyProperty
выглядит как поле, верно? Но давайте посмотрим, как это определено в классе:
Private pMyProperty As Integer
Public Property Get MyProperty() As Integer
MyProperty = pMyProperty
End Property
Public Property Let MyProperty(lMyProperty As Integer)
pMyProperty = lMyProperty
End Property
Как вы можете видеть из приведенного выше кода, хотя pMyProperty
является полем Integer, публичные Get
и Set
методы для MyProperty
на самом деле больше похожи на методы. Свойство «оборачивается» вокруг поля и особенно полезно при настройке доступа к базовому полю.
В вашем примере вы пытались ReDim
свойство, которое возвращает ссылку на массив. Я не уверен на 100%, но я не думаю, что вы можете использовать ReDim
для ссылки массива.
Я изменил ваш код, чтобы изменить собственное поле mstrTestArray
, и оно, похоже, работало нормально. Это то, что вы можете попробовать?
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 mstrTestArray(UBound(mstrTestArray) + 1) As String
TestArrayValue(UBound(TestArray)) = Chr(intCharCode)
End If
Next intCharCode
Debug.Print TestArrayValue(LBound(TestArray)) _
& " through " _
& TestArrayValue(UBound(TestArray))
End Sub