2014-02-13 4 views
1

У меня есть модуль с именем cTask с ниже кодом в нем:Sub свойства в модуле класса VBA Excel

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)... 

как мне делать вложенные свойства в моем классе?

EDIT: Так что в одном классе с именем 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 

и в классе cMile я имею

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 

тогда в моем суб я все это объявить

dim curtask as cTask 

Это верно? Она не работает, так что я, должно быть, пропустил что-то

+3

Вам нужно создать класс 'clsMile' с соответствующими свойствами и создать свой' pMile' типа clsMile вместо String. Когда свойство 'curTask.Mile' представляет объект, вам нужно будет использовать Set при присвоении ему значения. –

+0

Я не уверен, что получил все это. Я написал, что я сделал в редактировании своего сообщения – user2385809

ответ

3

Пример реализации вложенных объектов

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 

Обычный модуль :

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

Это сработало красиво. Извините за TIM. Статус TIM ans - это то же самое, что я просто изменил его с исходного порта на редактирование случайно. Только для моего понимания, что делает Private Sub Class_Initialize(). Он опустошает cMile, когда Let или Set of Mile? – user2385809

+0

и почему вы используете set вместо let для Mile? Большое вам спасибо. Я работал над этим некоторое время. – user2385809

+0

В VBA вы используете 'Set' при назначении значения свойства или переменной типа объекта.'Class_Initialize' запускается автоматически при создании экземпляра' cTask' и устанавливает свойство 'Mile' экземпляру' cMile'. –

Смежные вопросы