7

Excelには、MyModuleそのような機能を持つVBAモジュールがあります。

    Public Function MyFunction(Param1 As Range, Param2 As Range) As String
            ' some implementation
    End Function

実行時に、呼び出されたモジュールがあり、MyModule呼び出された関数があることを知っていますが、パラメーター名をMyFunction動的に検査したいと思います。Param1Param2

私の世界(C#)では、これはリフレクションと呼ばれています。ここで同様の概念を使用してパラメーター名を取得できますか、それともVBAに期待しすぎていますか?

4

1 に答える 1

7

このCodeProjectには優れた分析がありますhttp://www.codeproject.com/Articles/164036/Reflection-in-VBA-a-CreateObject-function-for-VBA

エキス:

VBAは、設計時にクラスのタイプを知らなくてもクラスをインスタンス化する機能など、多くの側面を持つOOPの概念であるリフレクションをサポートしていません。Reflectionは、VBAにはない非常に柔軟な柔軟性を提供します(少なくとも、通常の意図よりも多くの目的でVBAを使用したい人にとっては)。

いくつかの反射のようなものが可能です:

たとえば、コードで型を明示的に宣言せずに(Set xlApp = New Excel.Applicationを使用して)E​​xcelアプリケーションオブジェクトのインスタンスを作成したい場合は、次のリフレクションレベルのオブジェクト作成コードを使用して作成できます。

Dim xlApp As Excel.Application 
Set xlApp = CreateObject(,"Excel.Application") 

これは、タイプ固有のステートメントと同等です

Set xlApp = New Excel.Application

また:

assyliasアプローチを使用して、独自のコードを調べることができます(regexpまたはその他の解析を使用して、関心のあるコードの部分を選択します)。

yourWorkbook.VBProject.VBComponents("MyModule").CodeModule

この投稿にはいくつかの興味深いリードがあります:VBAのオブジェクトブラウザを反復処理する

于 2013-03-19T13:04:07.567 に答える