をそれのように関数を渡すことが可能です引数を入力し、その後の動作を正確に取得しますが、これは少しハッキリです。これは
はあなたの関数
Public Function sayHi(ByVal s As String) As String
sayHi = "Hi " & s
End Function
書き出し、それを含むクラスmyFunction
を作成し、開いて、クラスのデフォルトプロパティを活用することによって達成されます。
:あなたは今、それはこのように見えるように、ライン
Attribute Value.VB_UserMemId = 0
を追加し、どこかのファイルで、その下に
Public Function sayHi(ByVal s As String) As String
あなたの関数を定義する行が表示されるはずのテキストエディタ
でCLSファイル
Public Function sayHi(ByVal s As String) As String
Attribute Value.VB_UserMemId = 0
sayHi = "Hi " & s
End Function
ここでは、sayHi
をクラスのdefault propertyとマークしています。今、あなたはclass.function(args)
保存改正ファイルではなく、単独のクラスオブジェクトclass(args)
によって関数を呼び出して、あなたのVBAプロジェクトにインポートすることができ
テストモジュール
Sub test()
Dim parameterFunction As Object 'this is what we'll be passing to our routine
Set parameterFunction = New myFunction 'create instance of the function object
MsgBox f(parameterFunction, "Greedo")
End Sub
Function f(ByVal g As Object, ByVal x As String) As String
f = g(x)
End Function
* NB、このどのような関数を渡すことができます。代わりにByVal g As IStringFunction
を指定して、適切なインターフェイスを持つサブセットのみを取得することもできます。Gary McGill's answer
これは、彼がまだ各クラスに対して別々の評価関数を記述する必要があるためです。 – Treb
@トレブ:多分私はその質問を理解していないかもしれませんが、あなたが何を意味するのか分かりません。各クラスは異なる関数を表しますので、もちろん別の評価関数を持たなければなりません!たぶん、問題が再表明される可能性があるなら、それはもっと明確になるだろう。 –
こんにちは、これは正しい答えだと思います。これは、VBAにインターフェイスが存在することを、私は知らなかった、oo-languagesで行う方法です。私のせいです。私はこのテクニカルを小さなjava *で初めて見たことがあります。しかし、私は提案された解決策をテストしなければならない。現時点では、インターフェイスを実装しないというエラーメッセージが表示されました。 公開機能はブール エンド機能として(バリアントとしてByVal TMP)を適用 --- を実装IBooleanFunction 公開機能適用(ByValのTMPバリアントとして)ブールとして は= Application.IsText(TMP) エンド機能 –