使用vba中的接口对不同types的types使用相同的函数

function“AddWeight”可以增加每个宠物的体重。 我知道我的所有动物(Inherit)都具有basicInfotypes(“data”),所以我确信“AddWeight”函数可以正确处理它。

当然,VBA不会让我这样做,我试图在function标题上声明对象或变体..他们没有任何工作为我。

有没有人有创意?

我不想为每个动物编写这个函数,我也不觉得调用这样的函数是优雅的:

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 

正如评论中提到的那样,这并不是最严格意义上的“inheritance”。 这更像是一个复合结构。 如果你想用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 

如果你真的想使用接口,你需要构build类而不是types。 这样你可以让他们实现一个通用的接口,然后使用接口作为参数。 这可能会给你更强大和可扩展的代码。