De votre code, la fonction g prend un paramètre string et renvoie une chaîne. Je vous suggère de créer un module de classe appelé IStringFunction à agir comme la définition d'une interface que toutes les fonctions soutiendront ainsi:
Module Classe: IStringFunction
Public Function Evaluate(ByVal s As String) As String
End Function
Ensuite, créez deux fonctions par exemple la mise en œuvre de cette interface:
Module de classe: HelloStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "hello " & s
End Function
Module Classe: GoodbyeStringFunction
Implements IStringFunction
Public Function IStringFunction_Evaluate(ByVal s As String) As String
IStringFunction_Evaluate = "goodbye " & s
End Function
... et enfin, un code de test pour exercer les fonctions:
(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
Remarque que la classe implémentant l'interface doit avoir des méthodes nommées <Interface>_<Method>
comme dans l'exemple ci-dessus, pas seulement <Method>
comme on s'y attendrait.
Téléchargez le simple demo ou intermediate demo ici
Cela ne l'aide pas vraiment, car il doit encore écrire une fonction d'évaluation séparée pour chaque classe. – Treb
@Treb: peut-être que je ne comprends pas la question, mais je ne vois pas ce que vous voulez dire. Chaque classe représente une fonction différente, donc bien sûr, il doit avoir une fonction d'évaluation séparée! Peut-être que si le problème pouvait être réitéré, ce serait plus clair. –
Salut, je pense que c'est la bonne réponse. C'est la façon de le faire en oo-langues, je ne savais juste pas, que les interfaces existent dans VBA - ma faute. Je me souviens avoir vu cette technique la 1ère fois dans * un petit java *. Mais je dois tester la solution proposée. À l'heure actuelle, j'ai reçu un message d'erreur indiquant que l'interface n'était pas implémentée. Fonction publique applique (ByVal tmp As Variant) As Boolean End Function --- Met en œuvre IBooleanFunction Fonction publique applique (ByVal tmp As Variant) As Boolean apply = Application.IsText (tmp) End Function –