虽然Excel催化剂已经包含了大量的功能,但面对现实工作中,各种纷繁复杂的场景,仍然显得不够。 刚好QQ群里有讨论到学习VBA的话题,也顺带参与了一下,有了Excel催化剂,不止是对零代码使用上带来很大的便利,其实在日常编写VBA代码时,同样可以受益,轻松调用Excel催化剂开发出来的众多自定义函数。
VBA调用自定义函数原理
在工作表自定义函数的开发中,存在两种类似的自定义函数,一种是存储在xlam或xlsm上的,一种存储在xll文件上的。其开启关闭都在Excel普通加载项处,如下图所示。
如果不会打开此对话框,可以更傻瓜式地使用笔者开发的【OFFICE插件管理工具】操作,最新版支持普通加载项管理,如下图。
传送门:【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。
在VBA代码中,调用工作表自定义函数,只需要使用Application.Run即可,如果有参数就传入参数。具体的使用说明见下图官方文档。第一个参数是宏名称,即自定义函数名称,其他参数为自定义函数使用的参数。
能够使用Application.Run调用加载项的自定义函数的前提是此加载项已经在启用状态,否则是不能生效强行调用会报错。
因为VBA宏支持不同文件、不同模块,多个同名的函数,所以严格的调用自定义函数时,需要引用全名函数
例如如下的test.xlam文件中,有两个模块,分别为模块1、模块2,两个模块中有同一个函数testFunc,为验证结果,返回值将其分别设计为1和2。
在一个新的文件工作薄2.xlsm上调用其函数时,会提示报错,估计因为重名的原因而笔者在引用时没有引用全名,只引用宏名。
当这种同名的情况下,我们工作表函数调用时,也会提示我们选择全路径。
最终我们输入的函数全名时,可以正确使用,全名的输入格式为:
代码语言:javascript复制a = Application.Run("test.xlam!模块1.testFunc")
注意:在xll文件中的自定义函数没有全名的概念,所以还是保留着只引用函数名的调用方式,如果有重名,笔者也不知道会出现什么情况,有兴趣的读者可以自行测试
VBA调用Excel催化剂开发的自定义函数效果
因为Excel催化剂使用.net技术开发了大量的自定义函数,所以在VBA的开发过程中,完全可以复用这些的函数,减少自己的代码量,同时因为使用了.net技术,许多在VBA里难以实现的算法,均已经有现成可用了,可以极大地提高自己的开发效率。
具体有哪些自定义函数,及其的使用方法,可以在【功能清单搜索】上,点击【遍历功能清单】,将其所有函数清单遍历出来,供参考。
自定义函数在调用和返回上有以下几种情形
- 无参数调用
例如这个伪造函数,最精简时可以省略所有参数,调用的方法只需输入函数名。
- 有参数调用
例如以下的正则函数,也是可以轻松在VBA上使用上,并且是.NET版本的正则,比VBA的正则更好用。
- 返回多值结果的
Excel催化剂的自定义函数,可以返回多值,并在工作表单元格上自动扩展区域,同样地在VBA调用时,也可以返回多值,如果有Array返回数组结尾的函数尽量用这个函数,而不是自动扩展区域的函数。但经测试,自动扩展区域的函数如GetFiles,也是可用的,具体要自行多测试。
注意自动扩展区域的返回是一个二维数组,而非上方的Array结尾的一维数组。
结语
Excel催化剂不遗余力,花费近3年的时间打造的航空母舰级功能,衷心希望可以更多人从中受益,除了普通用户,其实VBA开发群体亦可以用得上许多能力。
300 个自定义函数,等着你们来掘宝,轻松复用,不必重复造轮子。