最近帮朋友写了个宏,但是因为好久没有用过vba了(话说我好像上次用vba写了个小功能还是05年的事情。。),所以基本上可以算是从零开始,边学边做,以赛代练了。
因为对语言不熟悉,一个小小的功能居然花了三天。。。不过还好,后面如果再有什么活儿的话应该就相对熟练了~
下面对这个小活儿里面碰到的陷阱做下梳理:
1.最最让我郁闷的:vba里面的数组定义
Dim arr_data(10) As Variant
正常的语言,这里的arr_data都是一个10个要素的数组。可是然而但是!vba里面,这个arr_data有!11!个!要!素!
也怪我想当然了。。被这个数组定义坑了好久。。
所以如果你要定义一个10个要素的数组,那么有以下几种方法:
Dim arr(9)
Dim arr(1 To 10)
Dim arr
arr=array(a,b,c,d,e,f,g,h,i,j)
当然还有其他很多方法,具体可以参照这篇:
VBA数组完全教程
2.子函数的定义
我自己用的子函数定义是这样的(就是个改变日期格式的小函数):
Function serviceDate(year, month, day)
serviceDate = year & "/" & month & "/" & day
End Function
这里面,函数体里面的serviceDate和函数名serviceDate是相同的,其实就是函数的返回值。
使用的时候要这样:
date_ServiceDate = serviceDate(year(date_OrgDate), month(date_OrgDate), day(date_OrgDate))
3.数组的个数取得(又是数组。。。)
我没找到直接取得数组元素个数的方法,所以只能通过以下方法计算:
array_num = UBound(arr) - LBound(arr) + 1
其中,UBound是数组的最大下标,LBound是数组的最小下标(一般是1)。虽然LBound一般就是0,但是还是减一下比较让人放心,谁没个万一呢~
4.Instr的使用
这个纯属我自己粗心。本来想在一个文字列里面查找字符出现的次数,在度娘上随便搜了下就用了Instr。
可是使用结果总是有问题。
比如在”ABCDEFGABCDEFG”文字列中查找”C”,得到的结果是3,而查找”B”,得到的结果是2。我就迷茫了,为啥B是对的C是错的捏?
没头绪了快2个小时才发现,Instr返回的结果只是找到的第一个字符在文字列中的位置。。。额。。。生命啊。。。就这么被粗心白白的浪费了。。。T.T
错误找到了,可我的问题没解决啊,我想要知道在文字列中字符出现了多少次,怎么办呢?后来我用了个很笨的办法:用Split函数把文字列按查找的字符分隔成数组,然后统计数组个数
Dim arr
arr = Split("ABCDEFGABCDEFG", "B")
B_num = comma_num = UBound(arr) - LBound(arr) + 1
就酱。。。谁要是有好办法麻烦留言和我说一声。。谢谢~~
姑且就这几个问题吧~以了个上~