2012-02-17 264 views
0

新建构建VBA中的类模块并努力填充另一个对象中定义的一个对象。VBA - 通过另一个对象(属性集)访问对象属性

例如,我有两个类模块的Class1和等级2

的Class1

Dim mobj As Class2 
Public Property Set SetObj(obj As Class2) 
    Set mobj = obj 
End Property 

的Class2

Public FirstName As String 

这些是从一个标准模块访问如下:

Sub test() 
Dim X As Class1 
Set X = New Class1 
Set X.SetObj = New Class2 
X.SetObj.FirstName = "Bruce" 
End Sub 

但是,当我收到“属性消息的无效使用”时,这在X.SetObj.FirstName =“Bruce”中失败。任何援助将不胜感激。

回答

3

你就近了。 的Class1:

Private mobj As Class2 
Public Property Set Obj(Obj As Class2) 
    Set mobj = Obj 
End Property 

Public Property Get Obj() 
    Set Obj = mobj 
End Property 

子(在X.Obj.FirstName行调用Get属性,而不是设置属性):

Sub test() 
    Dim X As Class1 
    Set X = New Class1 
    Set X.Obj = New Class2 
    X.Obj.FirstName = "Bruce" 
End Sub 
+0

感谢的细节,但你可以更好地解释他们一点?我想我看到你所做的改变,为什么,但你能证实吗?我看到: (1)使其他类对象私有 (2)您在对象的Set定义中传递对象本身(不确定如何可能,似乎无限递归,但显然我错过了某些东西) (3)“Get”函数只是将对象设置为另一个类。 我在哪里接近正确? – 2013-04-11 16:03:06

+0

我建议你用这些要求提出一个单独的问题。 – assylias 2013-04-11 16:33:09