VBA 中的函数没有特殊类型。我很难理解如何在 Excel VBA 中将函数作为参数添加到函数中。
我想要完成的是这样的事情:
function f(g as function, x as string) as string
f = g(x)
end function
目前,我有一组小函数,它们都在重复自身,但只调用一个特定函数。
最佳答案
在您的代码中,函数 g 接受一个字符串参数并返回一个字符串。我建议您创建一个名为 IStringFunction 的类模块来充当所有函数都支持的接口(interface)的定义,因此:
类模块:IStringFunction
Public Function Evaluate(ByVal s As String) As String
End Function
然后,创建几个实现此接口(interface)的示例函数:
类模块:HelloStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "hello " & s
End Function
类模块:GoodbyeStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "goodbye " & s
End Function
...最后,一些测试代码来练习这些功能:
(标准)模块:测试
Sub Test()
Dim oHello As New HelloStringFunction
Dim oGoodbye As New GoodbyeStringFunction
MsgBox Evaluate(oHello, "gary")
MsgBox Evaluate(oGoodbye, "gary")
End Sub
Private Function Evaluate(ByVal f As IStringFunction, ByVal arg As String) As String
Evaluate = f.Evaluate(arg)
End Function
请注意,实现该接口(interface)的类必须具有名为 <Interface>_<Method>
的方法如上例所示,不仅仅是 <Method>
正如您所期望的。
关于function - Excel VBA : Special Types - Functions as Arguments of Functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1118344/