在 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 类模块的主要内容,如果未能解决你的问题,请参考以下文章