如果我不能这样做,那么定义自己的对象有什么大智慧?

时间:2009-08-31 20:16:34

标签: excel vba return-value user-defined-functions return-type

这适用于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返回除内置类型之外的类型。有什么方法可以做到这一点吗?我是否必须为非内置类型定义分配?

2 个答案:

答案 0 :(得分:1)

提示:使用“SET”。

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

答案 1 :(得分:0)

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

Function GetBondPrincipal()
   Dim b As BondClass
   Set b = New BondClass
   with b
     .param1 = 0.03
     .param2 = 100
     .InitializeBond
     GetBondPrincipal = .GetPrincipal()
   end with
End Function