1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > EXCEL自定义函数的局限性:为什么VBA里可以运行 在EXCEL用自定义函数 就会返回错误值?

EXCEL自定义函数的局限性:为什么VBA里可以运行 在EXCEL用自定义函数 就会返回错误值?

时间:2022-11-22 08:17:36

相关推荐

EXCEL自定义函数的局限性:为什么VBA里可以运行 在EXCEL用自定义函数 就会返回错误值?

1目标问题:

为什么VBA里,function可以运行的代码,在EXCEL用自定义函数,会返回错误值?

例子1

比如下面这段代码,在VBA里运行的好好的在excel里 用= 自定义函数运行,就返回错误值,而且也不允许,去改变其他单元格得值,为啥呢,比如像这种 Cells(3, 6) = "aaa" 也运行不了

2 先说结论

EXCEL和VBA:自定义函数,其实受限制很多,远比不了VBA为啥在VBA里,点运行,好好的代码,在EXCEL里用 = 自定义函数名的方法调用,发现返回格子错误值?而且很多操作也不执行?因为那是在VBA里运行,是在VBA得环境下才能运行了,现在在 excel 自定义公式,当然可能不行能在VBA里执行的,不一定可以在EXCEL作为自定义函数执行,尤其是两者有些语法有差异,有的函数甚至不互通,差异更大自定义函数,是运行在EXCEL环境里得,语法受到EXCEL公式得语法限制,比如像这种 Cells(3, 6) = "aaa" 是运行不了得,因为这cells() 就不是excel得内置公式啊自定义函数,不要用EXCEL保留词。比如 function sum111() ,这样VBA写对了函数,在EXCEL运行还是会报错!!!也就是说,自定义公式,虽然是用VBA写得,但是必须得能在EXCEL里运行,得符合EXCEL得语法,不符合得就运行不了,或者返回值报错其他一些报错的可能:需要写成function 不能写成过程sub必须新建模块,否则,调用不到,工作表里定义的 函数

3 自定义函数返回值的情况

下面这些VBA函数,虽然都可以作为自定义函数在EXCEL里用,但各有不同没用返回值得,EXCEL里自定义函数,EXCEL里会返回0有返回值得,会返回自定义函数得返回值

Function testA1()'如果没用返回值,就相当于testA1返回了空值 null none,EXCEL调用为自定义函数会返回0'但是自定义函数要在EXCEL写法为 =testa1() 不能写成 =testa1否则会报错End FunctionFunction testA2()'如果没用返回值,就相当于testA2返回了空值 null none,EXCEL调用为自定义函数会返回0b = 100End FunctionFunction testA3()'有返回值,EXCEL调用为自定义函数会testA3得返回值testA3 = 100End Function

自定义函数,不要用EXCEL保留词。比如 function sum111() ,这样VBA写对了函数,在EXCEL运行还是会报错!!!

用 sum111 怎么都不对改成 test111就OK

4 这3个自定义函数都会返回错误值,因为单元格的语法是VBA的,不符合EXCEL公式语法

'下面3个报错都因为,EXCEL里指定范围得写法和VBA不同Function testB1()Cells(3, 6) = "testB1"End FunctionFunction testB2()Range("f5") = "testB2"End FunctionFunction testB3()[f7] = "testB3"End Function

5 可以正常运行,且返回值正确的 自定义函数

难道没有用VBA写得自定义函数,直接改变EXCEL内容得方法? 有,但是不能像VBA那么方便,用rang() 或者cells() 语法随便改自定义函数写在那个单元格,其实就是改变了单元格了吧!因为自定义函数也是 EXCEL函数的一种,必须符合EXCEL公式的各种限制,而EXCEL公式本身也不提供,函数返回值之外得直接修改 EXCEL单元格得办法!

'这个没问题,因为这里没涉及到excel里得操作Function testB4()Debug.Print "testB4"End Function'可以带参数,参数可以直接在EXCEL自定义函数时指定为其他单元格Function testB5(a, b)testB5 = (a + b)End FunctionFunction testB6(a As Integer, b As Integer) As IntegertestB6 = (a + b)End Function

6 如果希望自定义函数能返回多个值呢?

自定义函数 只能和 系统自带函数一样,只能改变1个单元格得内容?一般的是能同时改变多个格子嘛?像VBA一样?像VBA一样肯定不行普通公式肯定不行,只有数值公式可以,那也就意味着自定义函数当数组公式用就可以!但是在EXCEL输入 testc1(), 要横向选2个单元格,整体输入数组公式,ctrl+ shift +enter 输入

Function testC1(a, b)Dim c1()ReDim c1(1 To 2)c1(1) = a + bc1(2) = a - btestC1 = c1()End Function

7 那其他改动呢? 自定义函数能做的大概就是EXCEL的函数那些吧

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。