如何在Excel VBA中使用Implements

如何在Excel VBA中使用Implements

我正在尝试为工程项目实现一些形状并将其抽象出来用于一些常见功能,以便我可以使用通用程序。

我正在尝试做的是有一个调用的接口,cShape并拥有cRectanglecCircle实现cShape

我的代码如下:

cShape 接口

Option ExplicitPublic Function getArea()End FunctionPublic Function getInertiaX()End FunctionPublic Function getInertiaY()End FunctionPublic Function toString()End Function

cRectangle 类

Option ExplicitImplements cShapePublic myLength As Double ''going to treat length as dPublic myWidth As Double ''going to treat width as bPublic Function getArea()
    getArea = myLength * myWidthEnd FunctionPublic Function getInertiaX()
    getInertiaX = (myWidth) * (myLength ^ 3)End FunctionPublic Function getInertiaY()
    getInertiaY = (myLength) * (myWidth ^ 3)End FunctionPublic Function toString()
    toString = "This is a " & myWidth & " by " & myLength & " rectangle."End Function

cCircle 类

Option ExplicitImplements cShapePublic myRadius As DoublePublic Function getDiameter()
    getDiameter = 2 * myRadiusEnd FunctionPublic Function getArea()
    getArea = Application.WorksheetFunction.Pi() * (myRadius ^ 2)End Function''Inertia around the X axisPublic Function getInertiaX()
    getInertiaX = Application.WorksheetFunction.Pi() / 4 * (myRadius ^ 4)End Function''Inertia around the Y axis''Ix = Iy in a circle, technically should use same functionPublic Function getInertiaY()
    getInertiaY = Application.WorksheetFunction.Pi() / 4 * (myRadius ^ 4)End FunctionPublic Function toString()
    toString = "This is a radius " & myRadius & " circle."End Function

问题是每当我运行我的测试用例时,它都会出现以下错误:

编译错误:

对象模块需要为接口'〜'实现'〜'


GCT1015
浏览 1299回答 3
3回答

函数式编程

关于VBA和“Implements”语句有两个未记载的附加内容。VBA不支持派生类的继承接口的方法名称中的非核心字符“_”。它不会使用cShape.get_area等方法编译代码(在Excel 2007下测试):VBA将为任何派生类输出上面的编译错误。如果派生类没有实现在接口中命名的自己的方法,则VBA会成功编译代码,但该方法将通过派生类类型的变量无法实现。
打开App,查看更多内容
随时随地看视频慕课网APP