在vba中使用接口为不同类型的类型使用相同的功能

时间:2017-01-05 12:36:55

标签: excel vba excel-vba function types

功能" AddWeight"可以为每只宠物增加重量。我知道我的所有动物(继承)都具有相同名称的基本信息类型("数据"),所以我确定" AddWeight"功能可以正确处理它。

当然Vba不会让我这样做,我试图在对象或变体的函数标题中声明..它们对我没有任何作用。

有没有人有创意?

我不想为每一只动物编写这个功能,而且我也没有发现这样的功能是优雅的:

Call addWeight(Max_Cat.data)

有人有另一个想法吗?提前致谢

   Type basicInfo
                name As string
                weight as integer
                height as integer
            End Type

            Type cat
                data As basicInfo
                mustacheType As String
            End Type

            Type dog
                data As basicInfo
                bark_volume as integer
            End Type

       Dim Max_Cat as cat
       Dim Buddy_Dog as dog
    .
    .   some code
    .
        Call addWeight(Max_Cat)
        Call addWeight(Buddy_Dog) 


        Public Function AddWeight(petName as object) 'not work also for petName as variant
        petName.data.weight =petName.data.weight+50

        End Function

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,这不是最严格意义上的“继承”。它更像是一个复合结构。如果您想使用Type代表您的数据,显而易见的解决方案是只传递您要使用的成员,即basicInfo

Sub SomeSub()
    Dim Max_Cat As cat
    Dim Buddy_Dog As dog

    'Other stuff.
    AddWeight Max_Cat.data
    AddWeight Buddy_Dog.data
End Sub

Public Function AddWeight(animal As basicInfo)
    animal.weight = animal.weight + 50
End Function

如果确实想要使用接口,则需要构建类而不是类型。这样你就可以让它们实现一个通用接口,然后使用接口作为参数。这可能会为您提供更强大和可扩展的代码。