在C / C ++中,当我有很多函数(指针)时,可以将它们存储在数组或向量中,并按特定顺序一起调用其中的一些。在VBA中可以做类似的事情吗?
谢谢!
是的,但我不建议这样做。VBA并不是真的为此而构建。您已使用Excel标记了此问题,因此我将描述如何针对该Office产品完成该问题。通用概念适用于大多数Office Suite,但是每种不同的产品对该Application.Run
方法都有不同的语法。
首先,重要的是要了解动态调用过程(子/函数)的两种不同方法以及何时使用每种方法。
Application.Run
将运行子例程或调用存储在标准*.bas
模块中的函数。
第一个参数是过程的名称(作为字符串传入)。之后,您最多可以传递30个参数。(如果您的过程要求的不止于此,请重构代码。)
还有两件事要注意Application.Run
。
作为参数传递的对象将转换为值。这意味着,如果您尝试运行需要将具有默认属性的对象作为参数的过程,则可能会遇到意想不到的问题。
Public Sub Test1()
Application.Run "VBAProject.Module1.SomeFunction"
End Sub
在使用标准模块时,请使用Application.Run。
CallByName
执行对象的方法,或设置/获取对象的属性。
它以您要在其上调用方法的对象的实例作为参数,以及方法名称(再次作为字符串)。
Public Sub Test2()
Dim anObj As SomeObject
Dim result As Boolean
result = CallByName(anObj, "IsValid")
End Sub
使用CallByName
时要调用一个类的方法。
如您所见,这些方法都不使用实际的指针(至少不使用外部指针)。他们输入字符串,然后将其用于查找指向要执行的过程的指针。因此,您需要知道要执行的过程的确切名称。您还需要知道您需要使用哪种方法。CallByName
需要您要调用的对象实例的额外负担。无论哪种方式,都可以将这些名称作为字符串存储在数组或集合内。(哎呀,甚至一本字典也是有道理的。)
因此,您可以将它们硬编码为字符串,也可以尝试在运行时提取适当的过程名称。为了提取过程名称,您需要通过Microsoft Visual Basic for Applications Extensibility库与VBIDE本身进行接口。在这里解释所有这些都将需要太多的代码和精力,但是我可以为您指出一些好的资源。
文章和SE问题:
我的一些问答中的代码:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句