热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ExcelVBA存储函数或数组中的子例程

如何解决《ExcelVBA存储函数或数组中的子例程》经验,为你挑选了1个好方法。

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

谢谢!



1> RubberDuck..:

是的,但我不推荐它.VBA并不是真的为它而建.您已使用Excel标记了此问题,因此我将介绍如何为该Office产品执行此操作.一般概念适用于大多数Office套件,但每种不同的产品都具有不同的Application.Run方法语法.

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

Application.Run

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

第一个参数是过程的名称(以字符串形式传入).之后,您最多可以传递30个参数.(如果您的程序需要更多,请重构代码.)

还有另外两件需要注意的重要事项Application.Run.

    您不能使用命名参数.Args必须按位置传递.

    作为参数传递的对象将转换为值.这意味着如果您尝试运行需要具有默认属性作为参数的对象的过程,则可能会遇到意外问题.

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

    Chip Pearson的编程VBA编辑器

    扩展VBA可扩展性库

    获取vbext_ProcKind的丑陋解决方法正在打破封装

    VBA的自动化测试框架

    如何在运行时获取过程或函数名称

    导入代码行

    VBA中的元编程:VBIDE和为什么文档很重要

我的一些Q&As的代码:

    vbeCodeModule

    vbeProcedure

    vbeProcedures


很好的答案.正是我在上面的评论中提到的,但是太忙/懒得继续扩展.
推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
author-avatar
D之phper
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有