VBA链接自定义类属性

时间:2018-02-28 10:17:49

标签: vba class

我正在玩(学习)VBA自定义类,我无法弄清楚一件事,或者我甚至不知道是否可以做(VBA中的继承限制)

我从这篇文章中收集了关于链接的内容 VBA Class Method Chaining

在上面链接的示例中,您可以编写

obj.Borders.Color '-> this will return long type of color value

但是你不能使用obj.Borders,因为Borders被声明为派生类,在主类obj中声明,颜色是此派生类的属性。

我想弄清楚的是如何在自定义类中链接属性/方法

这样的东西
dim pvt as pivottable

set pvt = ....

pvt.pivotcache '-> method returns pivotcache object
pvt.pivotcache.memoryused '-> returns property of pivotcache object

如何使用自定义类执行此操作的任何简单示例。我好像无法绕过这个。

提前感谢您的任何示例

1 个答案:

答案 0 :(得分:0)

当一个类具有一个具有另一个属性的类型的属性时,您可以像使用另一个包含另一个包含...的框的框一样使用它们,依此类推。如果该属性不包含任何属性,则它为atomic并且仅包含一个值,例如stringlong。实施例

  

名为Pivottable的顶级课程。包含对Pivotcache

类型的对象的引用
Private m_pivotcache As Pivotcache

Private Sub Class_Initialize()
    Set m_pivotcache = New Pivotcache
End Sub

Public Property Get Pivotcache() As Pivotcache
    Set Pivotcache = m_pivotcache
End Property

Public Property Let Pivotcache(ByVal vNewPivotcache As Pivotcache)
    Set m_pivotcache = vNewPivotcache
End Property
  

另一个名为Pivotcache的类。它具有MemoryUsed类型的原子属性Long

Private m_memoryused As Long

Private Sub Class_Initialize()
    m_memoryused = 0
End Sub

Public Property Get MemoryUsed() As Long
    MemoryUsed = m_memoryused
End Property

Public Property Let MemoryUsed(ByVal vNewMemoryUsed As Long)
    m_memoryused = vNewMemoryUsed
End Property
  

在标准模块中测试

Sub test()
    Dim pvt As Pivottable
    Set pvt = New Pivottable
    pvt.Pivotcache.MemoryUsed = 123456789
    Debug.Print pvt.Pivotcache.MemoryUsed
End Sub