使用VBA开发自定义函数,可以弥补Excel内置函数的不足,简化函数公式,但是需要注意实现同样功能,自定义函数的效率远远不如内置函数,所以不要试图重新发明轮子。
最近发现了一个自定义函数的BUG(也可以说是个特定用法而已),和大家分享一下,我们以最简单的自定义函数实现两个数字相加,在工作簿中插入模块,在代码窗口中输入自定义函数代码,如下图所示。
在工作表中使用自定义函数也很简单,和内置函数没有什么区别,一切正常。
返回VBE窗口,修改模板名称为mySum
,即与自定义函数名称相同。
切换到Excel窗口,按F9键计算工作表,A1单元格显示错误,在A2单元格输入新公式,也显示相同错误。
进一步测试,只要自定义函数与其所在模块不重名,那么将不影响自定义函数的使用。如下图所示,文件中存在两个模块mdlCode
和mySum
,但是自定义函数保存在模块mdlCode
中,所以在工作表中使用自定义函数没有任务问题。
针对这个BUG,除了避免这样的重名,也还有其他解决方法,只需要在单元格中使用=mysum.mysum(2,3)
,也可以得到正确的结果,第一个mysum
指定的是模块名称,第二个mysum
是自定义函数名称,如下图所示。
平时多积累,日后少受难