2017-02-04 5 views
0

ClassA와 ClassB의 두 클래스 모듈과 클래스 B의 개체를 ClassA의 개체 속성에 추가하려고하는 모듈에 하위 모듈이 있습니다.클래스에 클래스 추가 가능 VBA

According to the VBE Glossary 클래스는 개체이고 속성 집합 문은 개체 형식을 추가 할 수 있으므로 가능해야합니다. 그러나 내가 테스트 서브를 실행할 때, 나는 "개체 변수 또는 With 블록 변수가 설정되지 않습니다"얻을

오류 소위원회 :

Sub test() 

Dim Class_A_Object As ClassA 
Dim Class_B_Object As ClassB 

Set Class_A_Object = New ClassA 
Set Class_B_Object = New ClassB 

Class_B_Object.Class_B_Property = 42 
Class_A_Object.Class_A_Property = Class_B_Object 

End Sub 

를 ClassA :

Private a_Class_A_Property As Object 

Public Property Set Class_A_Property(pClass_A_Property As Object) 
    a_ClassA_Property = pClass_A_Property 
End Property 

Public Property Get Class_A_Property() As Object 
    Class_A_Property = a_Class_A_Property 
End Property 

클래스 B :

Private b_Class_B_Property As Integer 

Public Property Let Class_B_Property(pClass_B_Property As Integer) 
    b_Class_B_Property = pClass_B_Property 
End Property 

Public Property Get Class_B_Property() As Integer 
    Class_B_Property = b_Class_B_Property 
End Property 
+0

가'Class_A_Object.Class_A_Property = Class_B_Object' – pinkfloydx33

+0

감사 설정, 나는 작동하는 버전을 내 샘플의 변경뿐만 아니라 일부 다른했다. 다시 한번 고마워요! –

+0

참고로 컬렉션을 클래스의 속성으로 설정 한 다음 해당 컬렉션 내에 다른 클래스 개체를 넣어 계층을 만들 수도 있습니다. – Zerk

답변

0

다음은 내 속성에 클래스 객체를 추가 할 수 있도록 변경 한 코드입니다. 변경 사항 pinkfloydx33을 제안하는 것뿐만 아니라, 객체를 보유하려는 속성의 문장에 "Set"키워드를 추가하고 해당 속성의 데이터 유형을 보유 할 클래스의 이름으로 변경했습니다.

'The Sub: 
Sub test() 

Dim Class_A_Object As ClassA 
Dim Class_B_Object As ClassB 

Set Class_A_Object = New ClassA 
Set Class_B_Object = New ClassB 

Class_B_Object.Class_B_Property = 42 
Set Class_A_Object.Class_A_Property = Class_B_Object 

End Sub 

'ClassA: 
Private a_Class_A_Property As Class B 

Public Property Set Class_A_Property(pClass_A_Property As ClassB) 
    Set a_ClassA_Property = pClass_A_Property 
End Property 

Public Property Get Class_A_Property() As ClassB 
    Set Class_A_Property = a_Class_A_Property 
End Property 

'Class B: 
Private b_Class_B_Property As Integer 

Public Property Let Class_B_Property(pClass_B_Property As Integer) 
    b_Class_B_Property = pClass_B_Property 
End Property 

Public Property Get Class_B_Property() As Integer 
    Class_B_Property = b_Class_B_Property 
End Property 
관련 문제