通过反射解析VBA模块函数参数



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

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

运行时,我知道我有一个模块叫MyModule我知道我有一个函数叫MyFunction但我想动态检查参数名Param1Param2

在我的世界(c#)中,这被称为反射。我可以在这里使用类似的概念来获得参数名称,还是我期望从VBA太多?

这个CodeProject中有一个很好的分析http://www.codeproject.com/Articles/164036/Reflection-in-VBA-a-CreateObject-function-for-VBA

提取:

VBA不支持反射,这是一个有很多反射的OOP概念面,包括实例化类而不知道的能力它在设计时的类型。反射提供了很大的灵活性在VBA中令人苦恼的缺失(至少对于我们这些喜欢使用

有一些类似反射的事情是可能的:

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

这相当于类型特定语句

Set xlApp = New Excel.Application

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

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

在这篇文章中有一些有趣的线索:在VBA中迭代对象浏览器

相关内容

  • 没有找到相关文章

最新更新