ExcelVBA的可变类型Variant
动态类型⼀时爽,代码重构⽕葬场。
虽然我并没有很好的理解这句话的意思,不过在经历过的VBA开发过程中,已经体会到了动态类型的可怕之处:明明跑了⽆数次的代码,突然就报错了,调试模式⼀看,诶卧槽,这玩意怎么会是这个值,哪⾥来的?!
今天我就来讲讲VBA的可变类型Variant的⼀些⽤法和注意事项。
刚接触VBA的时候,在VBA中创建数组是⼀个⿇烦的事情,尤其是要把单元格区域的值批量赋值给数组的时候,只要是声明好的数组,就只能⼀个⼀个地给数组赋值。
后来,就知道了⼀个简单粗暴的⽅法:
dim arr
arr=Range("A1:B12")
通过这个⽅法,能够⼀次性的将单元格区域转化为数组赋值给arr。同样的,⽤split函数同样可以返回数组赋值给⼀个可变类型,⽽你提前声明好的数组却不能⽤。
动态类型使⽤姿势1:
⼀个变量声明时若没有指定类型,则默认为Variant,你能够给它赋任何类型的数据,也能够在任何时间给它赋其他类型的数据并修改其类型。
这个性质可以在处理数据的时候加以利⽤,利⽤同⼀个变量就实现数据类型的转化,不⽤声明⼀堆变量。
动态类型使⽤姿势2:
⼀个数组声明时若未指定类型,则默认为Variant,这样的数组能够放⼊任何类型的数据,同⼀个数组内也可以存在多种类型的数据,不像C++那样,⼀个数组只能存放⼀种类型的数据。
这⼀性质在处理数据的时候能够带来极⼤的⽅便:字符串类型和数值类型存在于同⼀数组内,可以直接对数据进⾏处理并输出,不⽤特意去分割处理相关联的不同类型数据。这个性质实在是⽅便,是我最常⽤的性质,以⾄于我刚转到C++时因为不同数据不能混放⽽感到不⽅便,当然,习惯了之后C++还是很强⼤的。
动态类型使⽤姿势3:
⼀切未制定类型的变量都是Variant,可以放⼊任何数据,包括数组、对象等等。
这是⼀个神奇的性质,理论上来说,是要函数能够返回的数据,⽆论是单个的数据、数组、对象还是什么其他结构,都能赋值给可变类型,我们能在⼀个变量中放⼊⼀个数组、⼀个对象(当然,放对象时要⽤set),这样就产⽣了⼀些神奇的操作:数组⾥⾯存放的是数组,字典⾥⾯也可以存放数组,数组⾥⾯还可以放字典,字典⾥也可以放字典,只有想不到没有做不到。例如:
dim arr1(1 to 10)
dim arr2(1 to 10)
dim i as integer
for i=1 to ubound(arr1)
arr1(i)=arr2 '每个arr1()的成员都是⼀个数组
vba 字符串转数组next i
'此时arr1是⼀个存着10个数组的数组,使⽤⽅法如下
arr1(1)(2)=1
'这跟VBA的⼆维数组是不同的,更接近于C/C++中的⼆维数组,即嵌套数组的数组
dim arr3(1 to 10,1 to 10) 'VBA的⼆维数组是这样声明的:
arr3(1,2)=1 '使⽤⽅法也更直观
正是这些乱七⼋糟的⽤法,使得我们能够⾮常⽅便的创建我们想要的数据结构,以各种奇怪的姿势存储数据⽽不是想C++中⾮要创建⼀个class/struct。
当然,也正是这样灵活的性质,使得我们在使⽤时不得不确保它就是我们想要的数据类型,因为我们是在这个基础上进⾏编程的,如果出现了意料之外的数据⽽我们没有进⾏处理的话,程序在后⾯的处理中就会崩溃,所以,在必要的地⽅加上数据类型验证、对可能出现的意外数据类型进⾏处理,以便下⾯的程序能够正常运⾏。
以上。
本来想写写我在使⽤excel过程中的⼼得体会的,结果想写的时候才发现什么都想不起来,所以就把VBA的东西也写进来吧,想到什么写什么了,最近要教新⼈学VBA,应该会有点东西写。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。