关于VBA或者说程序的一般知识我们有了大概的了解。构成程序的内容都是对象,从层次上来说,最基础的对象就是属性、方法、事件,把多个属性或者方法可以放在更大一级的层次上,其实就可以叫做类或者类型,多种多样的类构成了整个程序。
类、方法、属性的使用
比如说有一个类名字叫A,他里面包含了一个属性B,和一个方法C,那么当你要使用这个类的属性或者方法的时候,他们之间就用点号隔开,也就是说A.B或者A.C,当然准确的来说如果是方法的话,需要括号,如果还有参数那么括号内还要填写参数,也就是A.C(),通过这样的方法在代码里面来使用类、方法、属性,另外一点通过点来表示他们之间的层次关系。
结合上一个章节我们提到的对象浏览器,我们可以在EXCEL类中找到WORKBOOK,然后找到WORKSHEET,然后找到NAME属性,那么理论上来说要使用NAME这个属性就是
EXCEL.WORKBOOK.WORKSHEET.NAME,然后你需要改名字,就把NAME=你需要的内容就可以了。
对,理论上是这样,也可以说这是一种约定的使用方法,实际使用起来你确实先要定义变量。定义变量的语法内容就是Dim [变量名] as [类型]。那么我们就不必把变量定义成EXCEL这么很大一级别的类型了,我们把他定义成WORKSHEET类型。
所以当写完 Dim sheet as Worksheet的时候,sheet就是你可以在代码中使用的变量的,当然他就是WORKSHEET的类型,因此sheet.NAME是肯定存在的。你也可以在编译器上试一下,当按下点号的时候编译器他智能的显示他有没有NAME的属性。
编译器的一大特点大家看到了吧,他可以智能的感知,不过这种智能并不是完全有效,有时候会没有任何反应,所以对象浏览器其实作用很大,他把EXCEL中所有的对象都罗列了出来,即便编译器没有智能显示,只要对象浏览器说他有他就有。
类、方法、属性从对象浏览器上来看实在是太多了,可大家不要恐慌,使用频率最多的无非就是字符串和数字,还有一个就是单元格类型了,毕竟你是在EXCEL上做编程不可避免的要和单元格特别是单元格的值打交道。
IF语法
程序的组成是类、属性、方法等等,但要使用它们的话,就涉及到语法了。每一种程序的语法各不相同。之前我们已经了解了如何使用变量,它的基本语法就是
Dim [变量名] as [类型]
之前我说BAISC语言就像是英文短句,这句定义变量的语法我想大家应该很好理解他把。变量名你可以随便取名字,但不要和已知的变量名重复。
另外两个比较常用的语法就是IF和循环了。
我在EXCLE函数中就说过,IF是最常用的,因为计算机本身就是二进制的,而自己的程序,哪怕是自己的人生都充满了判断和选择,所以IF我想无论在哪个编程语言中都是最常用的。IF的基本语法如下:
If [条件] Then
[当TRUE的时候]
Else
[当FALSE的时候]
End If
还是那句话,英文稍微有一点点了解的,也能看懂这个内容了吧。首先重要的是,IF开始了,就一定要END IF来结束,否则程序肯定报错。其次,ELSE是当条件为否的时候如何如何,这一部分的内容是可以不要的,也就是说IF可以只当条件成立的时候如何如何,其他的你可以不写。
需要注意的是,和EXCLE函数一样,这里的IF也是可以嵌套的,不过你在编写程序的时候千万记得每一个IF都有一个END IF,而IF多了的话,容易眼花缭乱的,所以利用首字缩进来表示层次是最好的,比如:
If [条件1] Then
If [条件2] Then
If [条件2] Then
End If
End If
End If
循环语法
计算机是给人干活的,不可避免地要去做重复劳动,所以循环就显得很重要的。循环主要有三种方式:计数循环、遍历循环、条件循环。
计数循环是最常用的了,就是按照指定的次数循环。语法如下:
For i = 1 To 10 Step 1
[循环内容]
Next i
简单说一下,这个循环意思就是让变量i从1到10,那也就是说循环10次,所以程序最开始i是等于1的,当走到Next i的时候i会自动加1,而这个自动加1其实就是Step所谓的步长,如果步长是1可以不写他是默认的,如果步长是2那就是Step 2,这种情况下Next i会把i在原来的数字上加2,那么循环就不是10次了。无论步长是多少,总之直到i等于10的时候结束。那么步长也可以是负数,那就是越走越小,如果你在上面这个循环中设置了Step -1,那好了,变量i是无论如何也不会走到10的,这种情况就是所谓的死循环了永远走不出来。
这个变量i你在循环内容中是可以使用的,他是整数类型的,另外这个1 To 10的两个数字也可以用变量来代替,当然不要发生死循环的情况。
遍历循环在EXCEL中也是常用的,因为这里涉及到单元格区域。我如果用语言来解释遍历循环,可能大家不一定能明白,那么我就用单元格区域来做解释了。比如我有一个单元格区域,其中单元格当然不会只有1个,肯定是大于1个的,我需要将这片区域内的所有单元格都设置成黄色的底色,这个时候你就要将每个单元格在这片区域内进行一番操作了,他其实就是一个循环,也就是遍历循环,语法如下:
For Each rng in Range
[rng底色设置黄色]
Next rng
这里的rng是一个单元格类型的变量,而Range是单元格区域应该说他也是一个变量,因为你先要有一个单元格区域才能进行遍历吧。至于如何设置黄色,现在先不说了。
遍历循环当然不会只能用在单元格区域中,本质上他就是在一个集合中让每一个元素走一遍,只不过如果你在EXCEL中使用遍历循环,那基本上就是和单元格区域有关系了。
条件循环顾名思义就是当满足条件或者不满足条件的情况下不断循环,直到条件被打破。这种循环的使用率比较小,大家了解一下即可。语法如下:
Do While [条件]
[循环内容]
Loop
我想这个循环语法的内容大家也能简单地理解了吧。需要注意的是,循环结束的标记是打破条件,所以不管你设置什么条件,在循环内容中一定要有涉及条件的内容,你想如果没有涉及条件的内容,那么条件永远满足或者不满足,好了又是一个死循环了。比如条件设置i<=10,如果在循环内容中不对变量i进行操作的话,那么i的值是永远不会变化的,那么条件就会永远满足了。
以上说的这些语法并不多,而且了解之后也基本上可以做实务操作了。我们可以看到VBA的语法有一个特点,他有开始语和结束语,特别是结束语千万不要忘记。