excel - 在 Excel 单元格中返回用户定义的数据类型

标签 excel vba user-defined-functions

我已经在网上搜索过,我已经在 stackoverflow 上搜索了这里的问题,但我一直无法找到解决方案。

这是我想做的:

假设我在名为“MyClass”的类模块中有以下代码


Option Explicit
Dim var1 as integer

Sub Initialize(v as integer) var1 = v End Sub

Function GetVar1() GetVar1 = var1 End Function


然后我在带有代码的单独模块中有一个 UDF
Function InitializeMyClass(v as integer) as MyClass Dim myvar as MyClass Set myvar = new MyClass Call myvar.Initialize(v) Set InitializeMyClass = myvar End Function

Function GetMyVar(m as MyClass) GetMyVar = m.GetVar1() End Function


现在在单元格 A1 中有“=InitializeMyClass(3)”,在单元格 A2 中有“=GetMyVar(A1)”。我在两个单元格中都收到 #VALUE 错误。这当然是因为我试图将用户定义的数据类型返回到单元格 A1 中。我觉得这应该是可能的,但我不确定如何。

编辑:哦,是的,问题是,“我有没有办法将用户定义的数据类型返回到单元格中,然后在我上面给出的示例中可以从另一个 UDF 调用它?我不知道这是否是否需要 COM。如果需要,任何人都知道我该如何开始?理想情况下,如果有人能举例说明它是如何工作的,那就太好了!

另一个编辑:我们开始吧,现在我知道它可以做到:阅读这个描述,它不是定量的,但会让你了解他们做了什么,http://www.quanttools.com/index.php?option=com_content&task=view&id=19

最佳答案

正如其他答案所暗示的那样,您的问题的字面答案是“不”。您不能在单元格中存储除数字、字符串、 bool 值、错误等之外的任何内容。除了从 UDF 中返回的简单值(例如这些值、数组或范围引用)之外,您不能返回任何内容。

但是,您基本上可以通过传递(并存储在单元格中)某种类型的对象句柄来完成您想要的操作,该句柄是合法的单元格值(即“myclass:instance:42”)。这可能就是您在编辑中链接到的示例所做的。但是,您的代码必须能够解释句柄值的含义并在内存本身中维护对象。如果您关心不泄漏对象,这可能会变得很棘手,因为有很多方法可以删除或覆盖您无法检测到的句柄,如果您使用 VBA 来执行所有这些操作。

我现在没有它,但您可能想看看 Steve Dalton 在 C/C++ 中使用 Excel 插件开发的金融应用程序一书:

http://www.amazon.com/Financial-Applications-using-Development-Finance/dp/0470027975/ref=ntt_at_ep_dpt_1

他讨论了使用 XLL 加载项更稳健地处理此类句柄的方法。

关于excel - 在 Excel 单元格中返回用户定义的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1354046/

相关文章:

excel - 引用范围内单元格值的方式之间的差异

hadoop - 用于在给定分隔符后提取文本的 impala 字符串函数

java - Spark UDF : How to write a UDF on each row to extract a specific value in a nested struct?

c# - 使用 C# 将单元格地址更改为 Excel 工作表中的行、列

vba - VBA错误处理,将错误定义为错误

excel - 将不同工作簿中的工作表复制到此工作簿引用问题

java - 从 Pig UDF 访问 HDFS

excel - 将不同查询的最新值查找到新列中

excel - 使用 INDIRECT() 通过 VLOOKUP() 设置动态范围

vba - 如何禁用保存功能