Excel VBA在数组中存储函数或子例程

用户名

在C / C ++中,当我有很多函数(指针)时,可以将它们存储在数组或向量中,并按特定顺序一起调用其中的一些。在VBA中可以做类似的事情吗?

谢谢!

橡皮鸭

是的,但我不建议这样做。VBA并不是真的为此而构建。您已使用Excel标记了此问题,因此我将描述如何针对该Office产品完成该问题。通用概念适用于大多数Office Suite,但是每种不同的产品对该Application.Run方法都有不同的语法

首先,重要的是要了解动态调用过程(子/函数)的两种不同方法以及何时使用每种方法。

应用程序运行

Application.Run将运行子例程或调用存储在标准*.bas模块中的函数

第一个参数是过程的名称(作为字符串传入)。之后,您最多可以传递30个参数。(如果您的过程要求的不止于此,请重构代码。

还有两件事要注意Application.Run

  1. 您不能使用命名参数。Args必须按位置传递。
  2. 作为参数传递的对象将转换为值。这意味着,如果您尝试运行需要将具有默认属性的对象作为参数的过程,则可能会遇到意想不到的问题。

    Public Sub Test1()
        Application.Run "VBAProject.Module1.SomeFunction"
    End Sub
    

外卖:

在使用标准模块时,请使用Application.Run。

VBA.Interaction.CallByName

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问题:

  1. Chip Pearson的编程VBA编辑器
  2. 扩展VBA可扩展性库
  3. 获取vbext_ProcKind的丑陋解决方法破坏了封装
  4. VBA的Automagic测试框架
  5. 如何在运行时获取过程或函数名称
  6. 导入代码行
  7. VBA中的元编程:VBIDE及其重要性

我的一些问答中的代码:

  1. vbeCodeModule
  2. vbe过程
  3. vbe程序

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel加载项从ActiveWorkbook调用子例程

来自分类Dev

函数存储在数组中

来自分类Dev

Excel VBA模块子例程未通过参数获取

来自分类Dev

VBA Excel类模块中的子属性

来自分类Dev

Excel在过程中锁定时,在Excel按钮上中断子例程

来自分类Dev

如何在Excel VBA中的子例程之间传递范围变量

来自分类Dev

Excel中具有大型数据集的VBA子例程的速度问题

来自分类Dev

Excel SUMIF,条件在数组中

来自分类Dev

VBA使用字符串数组作为子字符串参数InStr函数(Excel)

来自分类Dev

使用Java在Excel中插入存储在数组列表中的数据

来自分类Dev

Excel VBA ProperCase函数

来自分类Dev

如何在数组中返回多个值-Excel VBA

来自分类Dev

Excel加载项从ActiveWorkbook调用子例程

来自分类Dev

使用参数调用Excel VBA子例程

来自分类Dev

Excel VBA中的子字符串

来自分类Dev

如何在excel vba中获取子例程以返回某些内容?

来自分类Dev

vba excel vlookup:在存储的数组中查找值,在excel中的查找表,将值输出到数组

来自分类Dev

从函数Excel VBA返回多维数组

来自分类Dev

如何从Excel中的VBA函数返回数组?

来自分类Dev

Excel中具有大型数据集的VBA子例程的速度问题

来自分类Dev

VBA使用字符串数组作为子字符串参数InStr函数(Excel)

来自分类Dev

Excel VBA例程到UDF

来自分类Dev

重新定义Excel VBA函数中的数组

来自分类Dev

VBA EXCEL:如何在另一个子例程中调用一个子例程?

来自分类Dev

Excel:在 VBA 子文件中设置验证

来自分类Dev

使用 Excel VBA 检查字符串是否在数组中或不包含通配符

来自分类Dev

Excel VBA 排序数组函数

来自分类Dev

Excel 在数组中搜索并返回列

来自分类Dev

Excel VBA:将命名范围存储在数组中时出现应用程序或对象定义错误

Related 相关文章

  1. 1

    Excel加载项从ActiveWorkbook调用子例程

  2. 2

    函数存储在数组中

  3. 3

    Excel VBA模块子例程未通过参数获取

  4. 4

    VBA Excel类模块中的子属性

  5. 5

    Excel在过程中锁定时,在Excel按钮上中断子例程

  6. 6

    如何在Excel VBA中的子例程之间传递范围变量

  7. 7

    Excel中具有大型数据集的VBA子例程的速度问题

  8. 8

    Excel SUMIF,条件在数组中

  9. 9

    VBA使用字符串数组作为子字符串参数InStr函数(Excel)

  10. 10

    使用Java在Excel中插入存储在数组列表中的数据

  11. 11

    Excel VBA ProperCase函数

  12. 12

    如何在数组中返回多个值-Excel VBA

  13. 13

    Excel加载项从ActiveWorkbook调用子例程

  14. 14

    使用参数调用Excel VBA子例程

  15. 15

    Excel VBA中的子字符串

  16. 16

    如何在excel vba中获取子例程以返回某些内容?

  17. 17

    vba excel vlookup:在存储的数组中查找值,在excel中的查找表,将值输出到数组

  18. 18

    从函数Excel VBA返回多维数组

  19. 19

    如何从Excel中的VBA函数返回数组?

  20. 20

    Excel中具有大型数据集的VBA子例程的速度问题

  21. 21

    VBA使用字符串数组作为子字符串参数InStr函数(Excel)

  22. 22

    Excel VBA例程到UDF

  23. 23

    重新定义Excel VBA函数中的数组

  24. 24

    VBA EXCEL:如何在另一个子例程中调用一个子例程?

  25. 25

    Excel:在 VBA 子文件中设置验证

  26. 26

    使用 Excel VBA 检查字符串是否在数组中或不包含通配符

  27. 27

    Excel VBA 排序数组函数

  28. 28

    Excel 在数组中搜索并返回列

  29. 29

    Excel VBA:将命名范围存储在数组中时出现应用程序或对象定义错误

热门标签

归档