如果我不能做到这一点,那么定义自己的对象有啥大智慧?

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 函数设置参数,该类的用户应在类的每次实例化后调用该函数。

以上是关于如果我不能做到这一点,那么定义自己的对象有啥大智慧?的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义返回的 jQuery UI 自动完成列表

有啥办法可以做到这一点?相对路径使用

是否可以通过反射来做到这一点? [复制]

从xml构造自定义对象图

做到这一点,你也可以成为优秀的程序员

做到这一点,你也可以成为优秀的程序员(转)