vba的一些小陷阱

最近帮朋友写了个宏,但是因为好久没有用过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

就酱。。。谁要是有好办法麻烦留言和我说一声。。谢谢~~

姑且就这几个问题吧~以了个上~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值