通过反射解析VBA模块功能参数

时间:2013-01-07 17:00:18

标签: vba reflection

在Excel中,我有一个名为MyModule的VBA模块,它具有这样的功能

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

在运行时,我知道我有一个名为MyModule的模块,我知道我有一个名为MyFunction的函数,但我想动态检查参数名称Param1和{{1 }}

在我的世界(C#)中,这称为反射。我可以在这里使用类似的概念来获取参数名称,还是我对VBA的期望过高?

1 个答案:

答案 0 :(得分:6)

此CodeProject http://www.codeproject.com/Articles/164036/Reflection-in-VBA-a-CreateObject-function-for-VBA

有一个很好的分析

提取物:

  

VBA不支持反射,这是一个有很多的OOP概念   方面,包括在不知情的情况下实例化类的能力   它在设计时的类型。反射提供了极大的灵活性   VBA令人痛苦地缺席(至少对于我们这些喜欢使用的人来说   VBA超过通常意图。)

有一些反射式的东西可能:

示例

例如,如果我想创建一个Excel Application对象的实例而不必在代码中显式声明该类型(使用Set xlApp = New Excel.Application),我可以使用以下反射级别对象创建代码:

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

这相当于特定于类型的语句

Set xlApp = New Excel.Application

同时

您可以使用assylias方法查询自己的代码(使用regexp或其他解析来挑选您感兴趣的代码部分):

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

这篇文章中有一些有趣的线索:Iterating through the Object Browser in VBA