这是我VBA分享的第二篇,第一篇我们讲了最最基础的几点:
在哪里写VBA?
对象的最最最浅显的概念
对象的属性和方法
工作簿对象和方法:新建,激活,打开,保存,关闭
一、数据类型
VBA中有十几种额数据类型,其中常用的也有8、9种,数据类型种类繁多需要记忆,何况也可以不对变量声明数据类型一样可以使用,那为什么要确定数据类型呢?
打个比方,数据类型就像你去购买一个收纳产品,如果你想收纳散装的大米,但不论用左面竹篮子还是右边的小小的收纳盒显然都不那么对头:
而下面这个米缸:
显然就比较适合我们储存大米的目标。
VBA的数据类型和我们的收纳其实是一样的。不同的数据在内存中占用的空间是不一样的,运算方式也是不同的。采用合适的数据类型可以节约空间,并且提高程序的效率。
当然,在初学的时候,我们其实第一目标是写出可以运行的目标,而不是花很多时间去研究如何让这个程序架构特别的合适,运行特别的有效率,占用的空间尽可能的小。如果写都写不出来去思考这些,显然有走都走不清楚就想飞出地球的feel不是?所以下面,我也不会列出所有的类型,只列出我们初学者常用的几种
01
Boolean 布尔型
存储空间:2字节
范围:要不是ture要不是false
这是一个在条件判断中会出现的数据类型,真即为true,假即为false
另外需要注意,对编程语言来说,false为0,非0即为真。所以在其他数据类型转变为Boolean时,0会成为false,其他都是true。而当Boolean类型转变为其他数据类型的时候,false还是0,而true会变成-1.
02
数字类型
整数的常用数据类型有两种:
Integer 整数型 (%)
存储空间:2字节
范围:-32768到32767
Long 长整型 (&)
存储空间:4字节
范围:-2147483648到2147483647
表示小数的常用数据类型也有两种:
Single 单精度浮点型 (!)
范围:
负值范围: -3.402823E38到-1.401298E-45
正值范围: 1.401298E-45到3.402823E38
Double 双精度浮点型 (#)
存储空间:8字节
范围:
负值范围:-1.7976931386231E308 到 -4.94065645841247E-324
正值范围: 4.94065645841247E-324 到 1.79769313486231E308
小数的数据类型是不是看得都晕掉了?一句话,这两个数据类型可以表达非常非常大/小的数据。但是,Single类型只能保存6位小数,Double类型只能保存14位小数,超过部分Excel自动四舍五入截断。
03
String 字符串 ($)
变长字符串:
存储空间:10字节加字符串长度
范围:0到大约20亿字符
定长字符串:
存储空间:字符串长度
范围:1到大约65400个字符
04
Date 日期型
Date日期型的数据可以表示日期,也可以表示时间。
存储空间:8字节
范围:
日期范围:100年1月1日到9999年12月31日
时间范围:0:00:00到23:59:59
05
Object 对象型
上节课我们也讲到了对象这个概念啦,那么数据类型中自然也有对象型。
存储空间:4个字节
范围:任何对象的引用
06
Variant 变体型
变体型数据就是可以变来变去的数据类型,当不知道变量要表示的数据是什么类型时,就定义为Variant。
当然,这和我们的上面说的“合适的收纳”的原则不太相符,所以我们应该尽量避免使用这个数据类型。
小总结
VBA有十几种数据类型,我们这里展示了几种比较常用的数据类型。选择合适的数据类型进行数据存储可以避免浪费空间和提高程序的效率。
二、常量与变量
除了数据类型以外,我们还有一个常量和变量的概念需要学习。顾名思义,常量就是在程序过程中永远不变的量。有的童鞋可能就有疑惑了,如果都不变,那为啥要设置个常量呢?直接输入不就好了么?
当当当,这里就要请出基本99.9%的VBA书都要举得例子了。比如,某个程序需要多次用到一个比较精确的圆周率,3.14159265358 (背不下去了),那么,每次需要用到的时候都来输入一遍长长长长的圆周率一是太麻烦,二是万一手一抖或脑一短路输错了,都会造成不必要的麻烦。这时候,如果我们有一个叫做P的常量来代替这一串圆周率的数字,就会方便好用得多。
再说变量,那就比常量更加好理解了,在程序执行过程中可以随时变化的量。由于变量的可变性,它用的地方就更加广泛啦,比如说循环中不断增加的数字是个变量,需要从表格中变化的单元格取的数字是变量,用户对话框输入的数据是个变量。
小总结
数据有两种,常量和变量,常量是程序执行过程中不变的量,而变量则相反,变量的值是可以不断变化的
三、常量和变量的声明和复制
还是一样,我们这里只讲最最常用的声明方法,第一节课只讲了模块中的sub过程,所以我们这里也就先不考虑作用域的问题。
01
常量的声明
Const 常量名称 As 数据类型 = 数值
例如我们说的圆周率:
Const P As Double = 3.14159265358
思考
思考一下,这里为啥对圆周率选用了Double的数据量类型来声明?
小数的两种数据类型,Single只能储存6位小数位数,而Double是14位哦~~
02
变量的声明
Dim 变量名 As 数据类型
例如
Dim i As Integer
Dim i As Integer, MyPath as string
Dim i%
- 如果在一行中声明好几个变量,后面的Dim就不要再写啦,一行的开头有一个Dim就可以了。
- 最后一个Dim i%可能看蒙了大家。这是一个类型声明字符,我懒得打integer了,用%来表示。有类型声明字符的,我在上面介绍数据类型的地方已经给大家括号加上去了。
声明完数据类型之后,就是要给变量进行赋值了。对非对象数据类型的变量赋值非常简单,直接:变量名称=数据,完事。
例如,我需要一个字符串类型的变量WeChatAccount,要对它赋值为KeepLearn。声明加赋值如下:
Dim WeChatAccount As String
WeChatAccount = KeepLearn
对数据类型为对象类的赋值前面需要加上Set,Set 变量名称 = 对象
例如,我需要一个工作表类型的变量SummarySht,是我的KeepLearn工作簿的sheet1,声明和赋值如下:
Dim SummarySht As Worksheet
Set SummarySht = workbooks('KeepLearn.xlsm').worksheets(1)
四、小例子
这节课都是一些最最最基础的数据方面的概念,我们就在上节课的新建工作簿,另存工作簿,关闭工作簿的例子基础上做一点点小小的优化好啦。回顾一下上节课的这个例子:
如果我们的地址确定是这里且在程序中不会变化了,我们将它设置为常量如下:
通过定义一个常量,并对这个常量赋值,我们就避免了多次输入同样的一长串的地址。
如果这个地址可能是需要中间变化的呢?我们也可以把它设置成为一个变量,然后对这个变量赋值,那么该怎么做?
五、最后的最后
最近为了写VBA的这个入门教程也去借了一点书,去看了一点其他公众号的如何写这些问题。发现其实自己也还有很多不是很清楚的地方,所以再次说明这只是个人的一点小小的分享,目的只是为了让你能尽快上手写出一些小程序。
如果你需要非常非常专业的学习VBA的编程,我这种极简的目的可能不太适合你,毕竟有的书,写个数据类型就得有个十页去了。
联系客服