я нашел большой пост на SO что, кажется, именно то, что я хочу: Is it possible to access a parent property from a child that is in a collection? Однако моя адаптация этого дает мне Object doesn't support this property or method.
VBA пройти родительский класс для дочернего класса
Мой код, который теперь работает благодаря кружкой Мэта и Томалак:
родитель Класс - clsComputer
Option Explicit
Private pCD As clsCD
''''''''''''''''''''''''''''''
' CD property
''''''''''''''''''''''''''''''
Public Property Get CD() As clsCD
If pCD Is Nothing Then
Set pCD = New clsCD
'Per Mat's Mug post, drop the parenthesis
pCD.Initialze Me
End If
Set CD = pCD
End Property
Public Property Set CD(value As clsCD)
pCD = value
End Property
Детский класс - clsCD
Option Explicit
Private pParent As clsComputer
'''''''''''''''''''''''''''''
' Status property - READ ONLY
'''''''''''''''''''''''''''''
Public Property Get Status(Optional strHost As String) As String
Dim strResult As String
If strHost = "" Then strHost = Me.Parent.HostName
strResult = RunCMD("cmd /c ""winrs -r:" & strHost & _
" reg query hklm\system\currentcontrolset\services\cdrom /v start""")
If InStr(1, strResult, "0x4", vbTextCompare) Then
Status = "Disabled"
Else
Status = "Enabled"
End If
End Property
'''''''''''''''''''''''''
' Parent property
'''''''''''''''''''''''''
Public Property Get Parent() As clsComputer
Set Parent = pParent
End Property
'Because as Tomalak points out, you use Set with Objects.
Public Property Set Parent(Obj As clsComputer)
Set pParent = Obj
End Property
'''''''''''''''''''''''''
' Initialize Method
'''''''''''''''''''''''''
Public Sub Initialize(Obj As clsComputer)
Set Me.Parent = Obj
End Sub
Модуль Код - Модуль1
Sub test()
Dim oPC As clsComputer
Set oPC = New clsComputer
Debug.Print "CD Status: " & oPC.CD.Status
End Sub
Если я испытайте Меня, это объект (например, If IsObject(Me) Then Stop
оценивает истинный), и Intellisense показывает все свойства и методы в clsКомпьютер при вводе Me.
Окна локалей показывают мне как объект clsComputer. Все, что я знаю, чтобы проверить, говорит, что я - объект clsComputer, так что я делаю неправильно?
Aha! Между этим и @tomalak это исправляет!Я обновлю свой пост. – Tim
Awesome. Наконец, я знаю последний бит о том, что нужно делать с парсерами. Благодарю. – Tomalak