如果我不能做到这一点,那么定义自己的对象有啥大智慧?
Posted
技术标签:
【中文标题】如果我不能做到这一点,那么定义自己的对象有啥大智慧?【英文标题】:What is the great wisdom in defining your own object if I can't do this?如果我不能做到这一点,那么定义自己的对象有什么大智慧? 【发布时间】: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 ......有些事情非常慢,有些事情不那么慢。 【参考方案1】:提示:使用“SET”。
(VB 程序员在 VB6 和 VBA 中最常见的错误)。
【讨论】:
谢谢!这样做!这有点令人气愤! :) 你介意看看这个问题并给我你的想法吗? ***.com/questions/1354046/…【参考方案2】:无论如何,我觉得这不是很优雅。 我宁愿写:
函数 GetBondPrincipal() Dim b As BondClass 设置 b = 新 BondClass 与 b .param1 = 0.03 .param2 = 100 .InitializeBond GetBondPrincipal = .GetPrincipal() 以 结束功能【讨论】:
InitializeBond 不是 BondClass 类的一部分。我不允许单独设置参数。据我了解,没有默认构造函数,因此我需要通过类 .Initialize 函数设置参数,该类的用户应在类的每次实例化后调用该函数。以上是关于如果我不能做到这一点,那么定义自己的对象有啥大智慧?的主要内容,如果未能解决你的问题,请参考以下文章