형식 인스턴스의 복사본을 만들지 않고 로컬 변수를 사용하여 사용자 정의 형식을 참조하려면 어떻게해야합니까?VBA : 사용자 정의 형식에 대한 참조로 변수 사용
예를 들어, 다음 코드에서 MySub3은 로컬 변수 인 MT을 만들고 다른 구조체 안에 중첩 된 데이터 구조를 참조합니다. 그러나 VBA는 그렇지 않습니다. 이것을 허용하십시오. 그것은 객체를 허용하지만 사용자 정의 된 유형은 아닙니다 (arrggg!) ... 명백한 이유없이 ... 단지 허용하지 않습니다.
MySub1은 중첩 된 구조체를 긴 clunky 방식으로 참조하는 방법을 보여줍니다. MySub2는 중첩 된 구조체를 전달하여이 작업을 수행하는 방법을 보여 주지만 호출하는 루틴을 복잡하게 만들고 중첩 된 구조체가 여러 개 있으면 추악 해집니다.
MySub2는 VBA 은이 원하는대로 처리 할 수 있음을 보여 주며,이를 수행하는 방법을 제공하지 않는 것 같습니다. 나는 방금 비틀 거리지 않은 방법이 있기를 바라고 있습니다.
실제 코드는 여러 개의 독립 구조체가 구조체 요소로 많은 배열에 인덱스를 제공하는이 예제보다 훨씬 복잡합니다. 이러한 로컬 참조 변수를 사용하면 코드가 훨씬 읽기 쉽고 관리하기 쉬워집니다.
또한 "with"문을 알고 있고 도움이되지만 한 번에 하나의 구조체에서만 사용할 수 있습니다.
또한 실제 개체 클래스를 사용할 수 있다는 것을 알고 있습니다. 내 코드는 객체를 사용하여 시작했지만 VBA가 배열에 대한 제한을 속성 멤버로 지정한다는 사실을 사용자가 정의한 유형에는없는 제한이라는 사실을 빨리 알게되었습니다.
Type tMyType
VariableA As Single
End Type
Type tMyOtherType
MyTypeArray() As tMyType
End Type
Type tOneMoreType
MyOtherType As tMyOtherType
End Type
Dim GlobalIndex As Integer
Sub TopLevel()
Dim TopLevelType As tOneMoreType
ReDim TopLevelType.MyOtherType.MyTypeArray(0 To 10)
Call MySub1(TopLevelType)
Call MySub2(TopLevelType.MyOtherType.MyTypeArray(GlobalIndex))
Call MySub3(TopLevelType)
End Sub
Sub MySub1(OMT As tOneMoreType)
Dim VarA As Single
VarA = OMT.MyOtherType.MyTypeArray(GlobalIndex).VariableA
End Sub
Sub MySub2(MT As tMyType)
Dim VarA As Single
VarA = MT.VariableA
End Sub
Sub MySub3(OMT As tOneMoreType)
Dim VarA As Single
Dim MT
Set MT = OMT.MyOtherType.MyTypeArray(GlobalIndex)
VarA = MT.VariableA
End Sub
당신은 MySub1을 다시 만들었습니다. – grahamj42
괜찮습니다. 나는 그것을 알아 채지 못했습니다. :) 일반적으로 객체를 참조하지 않으면'Set'을 사용할 수 없습니다. 'Type'으로 정의 된 자신의 변수는 모두 object가 아닙니다. 조금 더 명확히하십시오 ... –
grahamj42 및 Kaz Jaw, 제 질문에 응답 해 주셔서 감사합니다. –