excel vba: Special Types - Functions as Arguments of Functions

后端 未结 3 1157
梦谈多话
梦谈多话 2020-12-07 23:03

There is no special type for functions in VBA. It is hard for me to see how to add functions as arguments to functions in Excel VBA.

What I am trying to accomplish i

3条回答
  •  天涯浪人
    2020-12-08 00:03

    From your code, function g takes a string parameter and returns a string. I suggest you create a class module called IStringFunction to act as the definition of an interface that all functions will support, thus:

    Class Module: IStringFunction

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

    Then, create a couple of example functions implementing this interface:

    Class Module: HelloStringFunction

    Implements IStringFunction
    
    Public Function IStringFunction_Evaluate(ByVal s As String) As String
        IStringFunction_Evaluate = "hello " & s
    End Function
    

    Class Module: GoodbyeStringFunction

    Implements IStringFunction
    
    Public Function IStringFunction_Evaluate(ByVal s As String) As String
        IStringFunction_Evaluate = "goodbye " & s
    End Function
    

    ...and finally, some test code to exercise the functions:

    (Standard) Module: Test

    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
    

    Note that the class implementing the interface must have methods named _ as in the example above, not just as you'd expect.

    Download the simple demo or intermediate demo here

提交回复
热议问题