【原创】VBA学习笔记(18) VBA的自定义函数 / 过程,到底能不能改变EXCEL单元格内容?(需要整理)

一 自定义函数
1.1 什么是EXCEL 的自定义函数
VBA里用户自己写了一些函数,这些非 EXCEL 和 VBA 内置的函数,也可以在EXCEL直接使用
VBA的函数在 EXCEL里如何使用?
单元格里输入 = 自定义函数名  即可
 

1.2 明确概念: 函数错误 Vs 函数返回值错误
函数错误:是 语法错误,允许错误,逻辑错误等等
函数返回值错误:是 函数调用后,返回值报错了。(不一定是函数本身的错误)
 

 

二 自定义函数详情总结
 

2.1 自定义函数总结
1---自定义函数的命名需要注意,有时候,自定义函数不正确是因为 函数命名 有问题
2---自定义函数在excel里使用,最好有返回值!
     没有的话也可以,会返回默认值,如0
3---自定义函数,在excel里使用,要注意数据类型是否有问题,比如要求是int的函数,无法处理字符串!
(exce l或 VBA的内置函数也一样,比如sum 也无法处理 字符串,sum("a") 也会报错)
4---自定义函数
 

 

2.2 自定义函数问题1:自定义函数命名有玄机,可能造成问题
下面2个自定义函数,就函数名不同
实测在EXCEL里输入
=SUM2(A1,B1)    返回值会报错,怀疑和 系统内置的函数名有些冲突 sum2?
=mysum2(A1,B1)


Function sum2(a As Integer, b As Integer) '怀疑函数名不能用
sum2 = a + b
End Function

Function mysum2(a As Integer, b As Integer)
'Dim a As Integer
'Dim b As Integer
mysum2 = a + b
End Function
 

2.3 自定义函数问题2: 数据类型要匹配,否则可能返回错误
自定义函数,也要注意,处理的数据的数据类型,如果不合适可能报错
这一点和EXCEL的内置函数一样
虽然sum之类的函数无法处理string
但string 就可以把 5这样的 integer当做字符串处理没问题



Function merge1(m As String, n As String)
merge1 = m & n
End Function


Function cube1(a)
cube1 = a * a * a
End Function

 

2.4 自定义函数问题3:自定义函数不一定有返回值
自定义函数里没定义 function_name=  赋值,返回,就会返回空值,可以试1个啥也不做的函数
相当于在一个EXCEL 的单元格里引用 自定义函数,因为自定义函数没有返回值,所以单元格的值就显示 #n/a #value
下面这个是因为试图改变单元格的值引起的报错
Function mysum1()
mysum1 = Cells(1, 1).Value + Cells(1, 2).Value
End Function



Function mysum3() '函数本身在VBA里OK,但这个当自定义函数使用,函数本事没事,但返回值会报错
Cells(10, 1).Value = Cells(1, 1).Value + Cells(1, 2).Value
End Function



Function mysum4() '改变单元格的值,会返回报错
Cells(10, 1).Value = 100
End Function

Function mysum5() '没返回值,不会返回报错,但是会返回0
End Function
 

用function 只干改变EXCEL单元格的值也不行

可能是没有函数返回值引起的问题?NO
还是因为改变EXCEL的单元格的值,引起的
Function mysum4() '这样也会返回错误
Cells(10, 1).Value = 100
End Function
 
2.5 自定义函数问题4:自定义函数不能改变EXCEL的单元格里的值?
自定义函数,在EXCEL运行也可以改变excel里的单元格的值啊?可以吗?--不行
 
Function mysum3()
mysum3 = Cells(1, 1).Value + Cells(1, 2).Value
'Cells(10, 1).Value = 100 '这句如果不注释掉,带上就返回错误,真TMD
Rem "function可以改变EXCEL的单元值?--现在测试还是不能啊!!!"

End Function
 

 

三  过程是可以的?
3.1 function不能的,过程可以做哪些?
过程可以改变EXCEL的单元格的值?--可以
而且是需要点击运行的
 

3.2   function的可以的,sub哪些不可以?
过程不能有返回值,
sub不能在excel里当自定义函数只有使用,只能 点击运行等
 

四  原因呢?
 

但空的可以增加,删除?增删改不能改? 但也能函数处理

这个是为啥?

EXCEL 数据  和VBA代码 隔开安全?

 

 

五 例外呢
看不懂的牛逼帖子

http://club.excelhome.net/thread-338141-1-1.html

 

 

参考的文档 和继续学习
https://zhidao.baidu.com/question/432290355.html

http://club.excelhome.net/thread-1143692-1-1.html

 

这2个需要学习

https://blog.csdn.net/hpdlzu80100/article/details/80795846

http://club.excelhome.net/thread-338141-1-1.html
————————————————
版权声明:本文为CSDN博主「奔跑的犀牛先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xuemanqianshan/java/article/details/89130115

posted @ 2020-05-04 09:35  天涯海角路  阅读(1411)  评论(0)    收藏  举报