在C/C++中,当我有一堆函数(指针)时,可以将它们存储在数组或向量中,并以某种顺序调用其中的一些。在VBA中是否也可以做类似的事情呢?
谢谢!
谢谢!
Application.Run
方法都有不同的语法。Application.Run
将运行储存在标准*.bas
模块中的子过程或调用函数。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问题:
来自我的问题和答案的代码:
Enum FType
func1
func2
func3
End Enum
Sub CallEnumFunc(f As FType, arg As String)
Select Case f
Case func1: MyFunction1(arg)
Case func2: MyFunction2(arg)
Case func3: MyFunction3(arg)
End Select
End Sub
Dim fArray(1) As FType
fArray(0) = func1
fArray(1) = func2
CallEnumFunc fArray(1), "blah"