【发布时间】:2009-08-31 20:16:34
【问题描述】:
这适用于 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 返回内置类型以外的类型。有什么办法可以做到这一点?我必须为非内置类型定义赋值吗?
【问题讨论】:
-
"Call myBond.Initialize(ir, p)" 可以/应该只是 VBA 中的 "myBond.Initialize ir, p"
-
我不喜欢后一种表示法。我更喜欢使用呼叫。使用 Call 时是否存在性能问题?
-
您正在使用 VBA。停止假装担心性能。 ;)
-
这正是我关心性能的原因。每一小时都很重要。如果这是 C++,我不会关心这里或其他地方的效率低下,因为总的来说事情很快。但是 VBA ......有些事情非常慢,有些事情不那么慢。
标签: excel vba return-value user-defined-functions return-type