나는 Property Is 및 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에서 로컬 배열 변수를 사용하고 DoArray의 끝에 TestArray = strTestArray를 설정하는 것이 대안이 될 것이라고 생각합니다. 감사! – Kuyenda
저는 VBA 전문가는 아니지만 class * 내에서 * private 변수 mstrTestArray를 사용하여 값을 변경하는 데는 아무런 문제가 없습니다. 나는 누군가가 당신의 객체를 소비하고'mstrTestArray'가 "클래스 내부에서"돌연변이를 일으키면 혼란 스러울 수도 있다고 생각합니다. VBA에서 많은 작업을 수행하려는 경우 ** VBA 개발자 안내서 받기 **를 고려하십시오. http://www.amazon.com/VBA-Developers-Handbook-Ken-Getz/dp/0782119514 –
그 책이 실제로이 물건들을 다루고 있습니까? 나는 이것처럼 철저한 책을 찾을 수 없었습니다 : http://www.cpearson.com/excel/mainpage.aspx. Ben에게 다시 감사합니다! – Kuyenda