Excel 97/VBA技术讲座之四
一、VBA控制结构
VBA是由Visual Basic语言发展而成的,其语言结构分为两部分:Visual Basic语言结构和其嵌入软件的对象模块(如Excel对象模块)。其中,Visual Basic是一套完全独立的Windows开发系统,是可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。与其它高级程序设计语言的控制结构一样,Visual Basic程序设计语言的控制结构分为三种:顺序结构、分支结构和循环结构。顺序结构:表示在每个过程或函数中程序依顺序执行每条语句,无条件判断转移和循环。原始记录宏的结构就属于顺序结构,既不能根据具体情况作出判断执行不同的操作,也不能对同一类问题自动地重复执行同一组操作。因而,要提高宏的灵活性,增加宏的功能,唯一办法就是修改宏,加入选择、判断、循环控制功能。
1. 分支结构
VBA的分支结构有:If语句和Select Case语句。If 语句
If语句是根据条件判断控制程序的分支,有三种形式:一是单分支结构,仅当条件为真时执行Then语句块;二是双分支结构,当条件为真时执行Then语句块,条件为假时执行Else语句块;三是多分支结构,格式如下:If 〈条件1〉 Then
〈语句块1〉
ElseIf 〈条件2〉 Then
〈语句块2〉
·
·
·
Else
〈语句块n+1〉
End If
当条件1为真时执行语句块1,否则,若条件2为真,则执行语句块2……如果所有的条件都不成立,则执行Else后面的语句块n+1。
例如为了更方便地浏览指定的工作表,希望限定活动单元格指针只能在工作表的3~9列内移动;当活动单元格位于3~9列之外时,将单元格指针移至该行的第3列;当活动单元格位于第9列,再右移时,单元格指针自动移至下一行的第3列。为此可以使用If结构的宏实现。相应的VBA程序如下所示:
Sub Move( )
‘在工作表的3~9列内右移单元指针
‘快捷键 Ctrl+Shift+M
If ActiveCell.Column < 3 Or ActiveCell.Column > 9 Then
Cells(ActiveCell.Row, 3).Select
ElseIf ActiveCell.Column = 9 Then
Cells(ActiveCell.Row + 1, 3).Select
Else
ActiveCell.Offset(0, 1).Select
End If
End Sub
Select Case语句
Select Case语句与If...Then...ElseIf语句非常相似,只是当判断控制仅取决于一个测试变量时,使用Select Case结构更有效、更简捷。Select Case语句的格式如下:
Select Case 〈测试变量〉
Case 〈表达式1〉
〈语句块1〉
Case 〈表达式2〉
〈语句块2〉
·
·
·
Case Else
〈语句块n+1〉
End Select
该语句的功能是:首先将测试变量的值与Case后面表达式的值相比较,哪个表达式与测试变量匹配就转向执行哪段语句块,执行完毕便转向End Select语句之后继续往下执行。如果所有的条件都不成立,则执行Case Else后面的语句块n+1。
在Select Case语句中,测试变量可以是变量、属性或表达式。Case语句后面的表达式有可以为一般表达式,也可以为Is关系表达式。
一般表达式可以由多个表达式组成,其间用“,”和“To”分隔,前者表示“或”,只要其中有一个表达式匹配即执行该Case语句对应的语句块。后者表示范围,指定范围时,表达式值须从小到大排列。例如:Case -20 To -15,15 To 20
Is关系表达式。表示测试变量应该与Is关键字之后的表达式比较,当指定范围为真,则执行该Case下面的语句块,反之转向比较其它表达式。
注意:测试变量的类型必须与Case后面表达式的类型一致。
例如现有学生的考试成绩存放在StScore工作表中,需要根据考试成绩,在其右邻单元给出优、良、中、及格、不及格五个等级。这可以方便地利用Select Case语句实现。相应的VBA宏程序如下所示:
Sub Score( )
‘给出优、良、中、及格、不及格五个等级。
‘快捷键 Ctrl+Shift+S
Select Case ActiveCell.Value
Case Is < 60
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "不及格"
Case 60 To 69.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "及格"
Case 70 To 79.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "中"
Case 80 To 89.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "良"
Case Else
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "优"
End Select
End Sub
(责任编辑:admin)