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

问题描述 投票:0回答:2

在 Excel 中,我有一个名为

MyModule
的 VBA 模块,它具有这样的功能

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

在运行时,我知道我有一个名为

MyModule
的模块,并且我知道我有一个名为
MyFunction
的函数,但我想动态检查参数名称
Param1
Param2

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

vba reflection
2个回答
7
投票

此 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 方法来询问您自己的代码(使用正则表达式或其他解析来挑选您感兴趣的代码部分):

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

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


0
投票

哈哈,这个已经很晚了。这可能对某人有用......

您想要的部分内容可能会通过 CallByName

得到解决

我已经编写 VBA 多年了,却不知道 VBA!

© www.soinside.com 2019 - 2024. All rights reserved.