0

这适用于 Excel 和 VBA。假设 BondClass 已在类模块中正确定义。我得到一个#VALUE!当我在 Excel 单元格中键入“=GetBondPrincipal()”时。我是否在语法上做错了什么,或者这在 Excel/VBA 中是不可能的?我问是因为我真正想做的是: Return a User Defined Data Type in an Excel Cell

但我无法找到解决方案。所以至少,我想知道我想在下面做的事情是否可行。


Option Explicit

Function InitializeBond(ir As Double, p As Double) As BondClass Dim mybond As BondClass Set mybond = New BondClass Call mybond.Initialize(ir, p) InitializeBond = mybond End Function

Function GetBondPrincipal() Dim b As BondClass Set b = New BondClass b = InitializeBond(0.03, 100) //the code quits here, //it doesn't like the BondClass return type? GetBondPrincipal = b.GetPrincipal() End Function

我知道在我提供的示例中,我不必调用 InitializeBond,只需键入“Call b.Initialize(.03,100)”即可。如果我这样做,代码将正常工作。但我似乎无法让 UDF 返回内置类型以外的类型。有什么办法可以做到这一点?我必须为非内置类型定义分配吗?

4

2 回答 2

1

提示:使用“SET”。

(VB 程序员在 VB6 和 VBA 中最常见的错误)。

于 2009-08-31T20:29:50.697 回答
0

无论如何,我觉得这不是很优雅。
我宁愿写:

函数 GetBondPrincipal()
   Dim b As BondClass
   设置 b = 新 BondClass
   与 b
     .param1 = 0.03
     .param2 = 100
     .InitializeBond
     GetBondPrincipal = .GetPrincipal()
   以
结束功能
于 2009-09-01T11:37:37.780 回答