在 Excel 公式中调用 VBA 类模块

Posted

技术标签:

【中文标题】在 Excel 公式中调用 VBA 类模块【英文标题】:Call VBA Class Module in Excel formula 【发布时间】:2016-01-15 22:26:39 【问题描述】:

我知道模块的函数可以用这样的公式调用:

=GetMyModuleFunction()

现在我想调用一个类模块函数。我根本不知道类模块是否可以在公式中实例化,所以我在模块中创建了一个函数,所以我可以像=GetMyModuleFunction() 一样调用它:

' Class Module MyClassModule:
Public Property Get MyProperty() As String
    MyProperty = "Hello World!"
End Property

Public Function GetMyFunction() As String

    GetMyFunction = "Hello World!"

End Function
' End Class Module MyClassModule

' Module MyModule:
Public Function GetMyClassModule() As MyClassModule

   Set GetMyClassModule = New MyClassModule

End Function
' End Module MyModule

所以在那之后我在公式栏中尝试了:

=GetMyClassModule().GetMyFunction()
=GetMyClassModule().MyProperty

显示公式无效的错误对话框。我想在这里实现的目标是不可能的吗?目前我使用模块代替,但具有重复名称的函数和子程序在模块中使用容易混淆和出错..

【问题讨论】:

【参考方案1】:

您的问题与此处提出的问题类似:Call VBA function that returns custom type from spreadsheet

您只能从用户定义的函数返回 Excel 可以理解的数据类型。 Excel 不理解自定义数据类型。

但您可以使用常规模块函数 (UDF) 包装您的类属性或函数,如下所示:

公共函数 GetMyClassModuleFunction() 作为字符串 GetMyClassModuleFunction = GetMyClassModule.GetMyFunction() 结束功能

【讨论】:

所以 Excel 只能理解 String 和 Integer 这样的原始类型? 还有数组和其他一些,但是是的。 Excel 分别评估公式的每个部分,因此它需要知道如何处理。它无法猜测如何处理自定义类型。

以上是关于在 Excel 公式中调用 VBA 类模块的主要内容,如果未能解决你的问题,请参考以下文章

基于背景颜色的Excel公式单元格

Excel VBA:将集合从类传递到模块问题

通过vba发送邮件但没有发送功能模块

请问,编程语言中,(VB或者说VBA,),宏是啥概念啊?宏做出来一个是类模块,但是类模块

Excel VBA > 公式在保存工作簿之前不会更新

Excel VBA批量处理寸照名字(类模块加FSO版)