【问题标题】:Build Object Hierarchy in Excel-VBA在 Excel-VBA 中构建对象层次结构
【发布时间】:2013-08-15 02:06:23
【问题描述】:

在我正在构建的各种 vba 自定义对象中复制粘贴相同的属性和方法时,我浪费了很多时间。如何在 VBA 中创建自定义对象层次结构,以便一个对象并从其他对象继承属性和方法。

在 python 中,我可能会写如下内容:

类汽车(对象)

随便

类慢车(汽车)

继承任何东西

类 FastCar(汽车)

继承任何东西

提前通知。

【问题讨论】:

标签: excel vba hierarchy custom-object


【解决方案1】:

如果我明白你在说什么,这可以通过类模块来完成。

  1. 从 VBA 编辑器中,选择插入 > 类模块
  2. 将类 Module 的名称更改为您想要的任何名称(Car for 例如)通过属性窗口(按 F4 使其出现,如果 还没有)

现在您已经创建了类模块,您可以定义它的变量和/或属性。下面的示例将进入您的 Car 类模块创建一个包含汽车名称和速度的对象

Private carName As String
Private carSpeed As Integer

' Car Name
Public Property Get Name() As String
    Name = carName 
End Property
Public Property Let Name(result As String)
    carName = result 
End Property 

' Car Speed
Public Property Get Speed() As Integer
    Speed = carSpeed
End Property
Public Property Let Speed(result As Integer)
    carSpeed = result 
End Property

然后从您的模块中,您可以执行以下操作

Sub CreateMyCars()
Dim slowCar as Car
Dim fastCar as Car

    Set slowCar = New Car
    Set fastCar = New Car

    slowCar.Name = "GoKart"
    slowCar.Speed = 35

    fastCar.Name = "Ferarri"
    fastCar.Speed = 185
End Sub

【讨论】:

  • 嗯,不完全是 Jaycal。 SlowCar 和 FastCar 不是 Car 的实例,而是对象本身。问题是它们会继承 Car 中内置的任何属性以及添加/覆盖的属性。因此,不必复制/粘贴“任何”都是汽车的子类型。
  • 好吧,我想我没有“理解你在说什么”:) 你说的更像是 Java 接口,其中“FastCar”会自动拥有所有方法Car 的属性和属性? (原谅我的天真...)
【解决方案2】:

VBA 支持通过使用接口进行继承,但它们只“继承”方法的签名,而不是实现。

重用对象实现的一种方法是通过组合。

Class Car(Object)
    whatever

Class SlowCar(Car)
    Implements Car

    private mCar         as Car

    Private Sub Class_Initialize
        set mCar = new Car
    End Sub

    Private Sub Car_whatever
        Call mCar.whatever
    End Sub 

FastCar 也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2023-04-08
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多