EXCEL VBA:特殊类型-函数作为函数的参数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

在VBA中没有函数的特殊类型。在ExcelVBA中,我很难看到如何将函数作为参数添加到函数中。

我想要完成的是这样的事情:

function f(g as function, x as string) as string
        f = g(x)
end function

目前,我有一组小函数,它们都在重复自己,但只需调用一个特定的函数。

提问于
用户回答回答于

从代码中,函数g接受一个字符串参数并返回一个字符串。我建议您创建一个名为IStringFunction的类模块,作为所有函数都支持的接口的定义,因此:

类模块:IStringFunction

Public Function Evaluate(ByVal s As String) As String
End Function

然后,创建几个实现此接口的示例函数:

类模块: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>_<Method>就像上面的例子一样,不仅仅是<Method>正如你所期望的。

用户回答回答于

由于VBA的根源是交互式语言,所以它一直有执行文本的能力:

function f(g as string, x as string) as string
        f = application.run(g,x)
end function

MyStringA = f("functionA",string1)
MyStringB = f("functionB",string1)

扫码关注云+社区