2014-02-13 6 views
1

나는 아래의 코드 그것에으로 cTask라는 이름의 모듈이 있습니다하위 속성은

Private pMile As String 

Public Property Get Mile() As String 
Mile = pMile 
End Property 

Public Property Let Mile(Value As String) 
pMile = Value 
End Property 

그래서 내 하위의를 내가

dim currtask as cTask 
을 시작 말할 수 내가 쓰고 싶은

curtask.Mile=TIM 

또한

curtask.Mile.stat=2 

그냥 내 클래스에서 중첩 된 속성이 할 어떻게

worksook("qqq").sheets("okko").cells(1,1)... 

로?

편집 : 그렇게 선언 cTask

Private pMile As cMile 
Public Property Get Mile() As String 
Mile = pMile 
End Property 

Public Property Let Mile(Value As String) 
pMile = Value 
End Property 

라는 하나 개의 클래스와 내가 모두 내 하위에 내가

Private pstatus As String 

Public Property Get status() As String 
status = ppstatus 
End Property 

Public Property Let status(Value As String) 
pstatus = Value 
End Property 

다음이 cMile 클래스에있는

dim curtask as cTask 

이 올바른지?

Private pMile As cMile 

Public Property Get Mile() As cMile 
    Set Mile = pMile 
End Property 

Public Property Set Mile(Value As cMile) 
    Set pMile = Value 
End Property 

Private Sub Class_Initialize() 
    Set Me.Mile = New cMile 
End Sub 

cMile :

Private pStatus As String 
Private pNumber As Long 

Public Property Get Status() As String 
    Status = pStatus 
End Property 

Public Property Let Status(Value As String) 
    pStatus = Value 
End Property 

Public Property Get Number() As Long 
    Number = pNumber 
End Property 

Public Property Let Number(Value As Long) 
    pNumber = Value 
End Property 

정기 모듈은 뭔가

+3

적절한 속성을 가진'clsMile' 클래스를 만들고 String 대신 clsMile 타입의'pMile'을 만들어야합니다. 'curTask.Mile' 속성이 객체를 나타내면 값을 할당 할 때 Set을 사용해야합니다. –

+0

나는 그 모든 것을 가지고 있는지 확신하지 못합니다. 나는 나의 지위의 편집에서 내가했다라고 썼다 – user2385809

답변

3

중첩 된 객체

의 예를 구현

cTask 내가 놓친 있어야 작동하지 않습니다 :

Sub Tester() 

    Dim Task As New cTask 

    Task.Mile.Status = "Done" 
    Task.Mile.Number = 11 

    Debug.Print Task.Mile.Status, Task.Mile.Number 

End Sub 

은 무엇 원래의 질문에서 빠진 것은 이것이다 :

curtask.Mile=TIM 

당신이 무슨 뜻인지 분명하지 않다 : 그것은 종류의 cMile 클래스에 "기본 속성"처럼 보인다, 그러나 그것은 VBA에서 (또는 적어도 쉽게) 지원되지 않습니다.

+0

이것은 beautifuly 히 일했다. TIM에 대해 유감입니다. TIM ans Status는 방금 원래 포트에서 실수로 편집 포트로 변경 한 것과 같습니다. 내 이해를 위해서 Private Sub Class_Initialize()는 무엇을 하는가. 그것은 Let 's or Set of Mile 때 cMile을 비 웁니 까? – user2385809

+0

그리고 왜 sis는 let 대신에 let을 사용합니까? 고맙습니다. 지금은 잠시 동안이 문제를 해결해 주셔서 감사합니다. – user2385809

+0

VBA에서는 객체 유형 속성이나 변수의 값을 지정할 때'Set'을 사용합니다.'Class_Initialize'는'cTask'의 인스턴스가 생성 될 때 자동으로 실행되고,'Mile' 속성은'cMile'의 인스턴스로 설정됩니다. –